使用数据子集时如何在data.table中创建新列并计算中位数

加布里埃尔

嗨,我有这样的数据:

  date    type    data
198101       1     0.1
198101       1     0.3
198101       2     0.5
198102       1     1.2
198102       1     0.9
198102       2     0.7
198102       2     0.3

当 type == 1 时,我想根据标准创建一个新列来显示每个月的中位数。

我想要的结果是这样的

  date    type    data    P50
198101       1     0.1    0.2
198101       1     0.3    0.2
198101       2     0.5    0.2
198102       1     1.2   1.05
198102       1     0.9   1.05
198102       2     0.7   1.05
198102       2     0.3   1.05

目前我是这样做的,让我们将上面的 data.table 称为 dt

dt.median = dt[type == 1]
dt.median = dt.median[, .(P50 = median(data)), by=.(date)]

然后将其合并回原来的 dt

dt = dt[dt.median, nomatch = 0, by=.(date)]

使用 .SD 或 .SDcol 有没有更快的方法来做到这一点?我想练习使用 .SD 但只是无法用一行代码弄清楚?

我能想到的是目前

dt[, P50 := * .SD[type == 1] ...  * , by =.(date)]

但后来我不知道用什么语法来计算中值 * .SD[type == 1] ... *,

帮助将不胜感激!

IRTFM

只需使用逻辑向量索引组内的数据值,并使用 data.table 特殊赋值运算符进行赋值, :=

> dt[ , P50 := median(data[type==1]), by=.(date)]
> dt
     date type data  P50
1: 198101    1  0.1 0.20
2: 198101    1  0.3 0.20
3: 198101    2  0.5 0.20
4: 198102    1  1.2 1.05
5: 198102    1  0.9 1.05
6: 198102    2  0.7 1.05
7: 198102    2  0.3 1.05

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从Python中的2名不同的列表中位数计算

如何基于python中的列标签计算均值和中位数

如何在mysql 5.7中正确计算中位数

如何在Hive中计算中位数

如何在不同子集上使用data.table的j创建多个新列

如何使用data.table有效地计算行中位数

如何用预先计算的平均值,中位数,百分位数等值在seaborn中创建箱线图?

根据其他列定义的子集,按组计算多列的中位数

如何计算数组中的最大中位数

data.table(r)中的加权滚动中位数

如何在Python中更快地计算中位数

如何计算Google BigQuery中多列的中位数?

如何计算分组中位数并作为新列附加到数据框

计算R中数据框中行和列的中位数

Excel中的中位数和模式使用多列

如何计算Postgres中的中位数?

如何在PrestoSQL中计算中位数?

如何按因子计算多列的中位数?

使用不同的表计算SQL查询中的中位数

使用SQL计算列的中位数

使用 R,如何使用现有数据框中列的中位数创建新数据集?

我在计算 Hive 中的中位数时做错了

如何计算pysparK中多列的中位数?

如何在Java中实现中位数算法的中位数

计算数据框中多列的中位数

python中如何计算字典数据的均值和中位数

根据另一列的值创建列中中位数差异的数据框

如何计算R中组中位数之间的列差异

如何计算此数据框中不同种类的中位数,其中位数按种类标记并删除重复项