Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在一次调用中使用.N和.SD_R_Data.table - Fatal编程技术网

R 在一次调用中使用.N和.SD

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.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不会返回答案-

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
子集。