在一次通话中使用.N和.SD

时间:2014-01-15 21:03:16

标签: r data.table

假设我有一个data.table如下 - :

data = data.table(c("a","a","b","b","c"),c(1,2,3,4,5))

我想对数字向量求和,只有当因子向量有多个条目时才有。 我遇到的问题需要使用.SD。我知道我可以通过

创建一个N字段
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]

谢谢!

1 个答案:

答案 0 :(得分:7)

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