使用数据子集时如何在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条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

从R中的data.table列计算中位数

来自分类Dev

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

来自分类Dev

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

来自分类Dev

使用SQL计算列的中位数

来自分类Dev

如何计算iReport中变量的中位数?

来自分类Dev

如何计算AWS Redshift中的中位数?

来自分类Dev

如何计算Postgres中的中位数?

来自分类Dev

计算分组数据每一列的中位数

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

如何计算分组数据集的中位数?

来自分类Dev

如何在Hive中计算中位数

来自分类Dev

如何在PrestoSQL中计算中位数?

来自分类Dev

不同数据框中相同列的中位数

来自分类Dev

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

来自分类Dev

使用data.table,不创建新列的条件计算

来自分类Dev

计算数据框中一行的中位数并保存到新变量

来自分类Dev

当列名必须为字符串时,如何在data.table中创建新列

来自分类Dev

当列名必须为字符串时,如何在data.table中创建新列

来自分类Dev

如何在数据框中遍历列的子集以创建新变量

来自分类Dev

根据另外2列计算数据框列的中位数

来自分类Dev

如何计算DataFrameGroupBy对象的中位数?

来自分类Dev

如何计算中位数而忽略负值?

来自分类Dev

如何计算伽马分布的中位数?

来自分类Dev

C ++使用参考计算中位数

来自分类Dev

使用Java Stream API计算中位数

Related 相关文章

热门标签

归档