我发现了一个令人惊讶的结果
data.table
. 下面是一个非常简单的例子:
library(data.table)
df <- data.table(x = 1:10)
df[,x[x>3][.N]]
[1] NA
此语法给出
NA
但这项工作:
df[,x[x>3][1]]
[1] 4
当然还有这个
df[,x[.N]]
[1] 10
我知道在这个简单的例子中你可以做到
df[x>3,x[.N]]
df[,x[x>3][.N]]
使用lapply on时的语法
.SD
以避免在
i
选择,比如
df2 <- data.table(x = rep(1:10,2), y = rep(2:11,2),ID = rep(c("A","B"),each = 10))
cols = c("x","y")
df2[,lapply(.SD,function(x){x[x>3][.N]}),.SDcols = cols, by = ID]
但这失败了,就像我的简单例子一样。是因为
.N
在这种情况下是不是没有实现,还是我做错了什么?
我的实际工作:
Reduce(merge,lapply(cols,function(col){df2[col>3,setNames(list( get(col)[.N]),col),by = ID]}))
ID x y
1: A 10 11
2: B 10 11
但我对它并不完全满意,我发现它不太可读。有没有人能解释和更好的工作?
谢谢您!!