【发布时间】:2019-05-28 14:07:59
【问题描述】:
我有这样的数据:
这只是我创建的假数据:
# dt
Col1 Col2 Col3 Col4
2014/1/1 A 10 1
2014/4/1 A 15 1.5
2015/1/1 A 15 3
2015/4/1 A 30 4
2014/1/1 B 20 2
2014/4/1 B 30 6
2015/1/1 B 40 10
2015/4/1 B 80 16
我想要什么:
Col1 Col2 Col3 Col4 Col3.R Col4.R
2014/1/1 A 10 1 1 1
2014/4/1 A 15 1.5 1.5 1.5
2015/1/1 A 15 3 1.5 3
2015/4/1 A 30 4 3 4
2014/1/1 B 20 2 1 1
2014/4/1 B 30 6 3/2 3
2015/1/1 B 40 10 2 5
2015/4/1 B 80 16 4 8
新列Col3.R是由每组下col3的值Col2除以每组的第一个值来计算的。与col4.R 相同。
我试试下面的代码:
dt[, sapply(.SD, function(x) R = x / x[1]), .SDcols = 3:4, by = .(Col2)]
如何保留原有的列?我需要为data.table 使用参数on 吗?
数据:
dt <- fread(" Col1 Col2 Col3 Col4
2014/1/1 A 10 1
2014/4/1 A 15 1.5
2015/1/1 A 15 3
2015/4/1 A 30 4
2014/1/1 B 20 2
2014/4/1 B 30 6
2015/1/1 B 40 10
2015/4/1 B 80 16", header = T)
dt$Col3 <- as.numeric(dt$Col3)
【问题讨论】:
标签: r data.table data-manipulation sapply