我有一个名为“ sampleDT”的数据表,其中包含列c1和c2
require(data.table)
sampleDT <- data.table(c1 = c(1,2,3), c2 = c(7,5,6), result = c(NA, 7, 7))
print(sampleDT)
> print(sampleDT)enter code here
c1 c2 result
1: 1 7 NA
2: 2 5 7
3: 3 6 7
我想创建一个新的列“结果”;并且该值是上一行的最大值:
sampleDT[2,result] == 7
。我们显然可以使用for循环来实现它;我想知道是否有更快的解决方案? (注意:不确定shift
是否可行,因为结果取决于上一行。
答案 0 :(得分:1)
您可以利用data.table
的链接:
# load package
require(data.table)
# create dummy data
sampleDT <- data.table(c1 = c(1,2,3), c2 = c(7,5,6))
# run code
sampleDT[, result := shift(apply(.SD, 1, max)),
.SDcols = 1:2][, result := shift(apply(.SD, 1, max, na.rm = TRUE)),
.SDcols = 1:3][]
>
c1 c2 result
1: 1 7 NA
2: 2 5 7
3: 3 6 7