R 在一次调用中使用.N和.SD
假设我有一个data.table,如下-:R 在一次调用中使用.N和.SD,r,data.table,R,Data.table,假设我有一个data.table,如下-: data = data.table(c("a","a","b","b","c"),c(1,2,3,4,5)) 我想对数值向量求和,仅当因子向量有多个条目时。 我遇到的问题需要使用.SD。我知道我可以通过 data[ , N := .N, by = V1] 然后通过 data[N > 1, lapply(.SD,sum), by = V1, .SDcols = 2] 但是,是否有一个单步调用来实现这一点 调用中引用.SD不会返回答案- dat
data = data.table(c("a","a","b","b","c"),c(1,2,3,4,5))
我想对数值向量求和,仅当因子向量有多个条目时。
我遇到的问题需要使用.SD。我知道我可以通过
data[ , N := .N, by = V1]
然后通过
data[N > 1, lapply(.SD,sum), by = V1, .SDcols = 2]
但是,是否有一个单步调用来实现这一点
调用中引用.SD不会返回答案-
data[, lapply(.SD[which(length(.SD)>1)],sum), by = V1, .SDcols = 2]
我想了解为什么这不起作用。也不是-:
data[, lapply(.SD[which(.N>1)],sum), by = V1, .SDcols = 2]
谢谢 data 1)lapply(.SD,sum)else NULL,by=V1]
data <- data.table(c("a","a","b","b","c"),c(1,2,3,4,5))
data[, if(.N > 1) lapply(.SD, sum) else NULL, by=V1]
# V1 V2
# 1: a 3
# 2: b 7
#V1 V2
#1:a 3
#2:B7
data[,if(.N>1)lapply(.SD,sum),by=V1]
怎么样?天哪,@Arun,我认为我们的答案是一个字符一个字符地相同的(nm,否则NULL
没有必要,没有考虑)@user2006864子集。SD
将只返回.SD
中的列(这就是您在两个示例中尝试的操作),然而,如果.SD
有多行,则需要返回所有.SD
,然后对列求和。请注意,我们的解决方案根本不包含.SD
子集。