Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.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 .SD列上的data.table子集条件?_R_Data.table - Fatal编程技术网

R .SD列上的data.table子集条件?

R .SD列上的data.table子集条件?,r,data.table,R,Data.table,我想创建与下面的最小可复制示例相同的结果,但您可以看到最后一个代码的子集条件基本上是删除行,其中.SD列不应全部为零 library(dplyr) library(data.table) set.seed(1) t1 <- sample(-1:1, 999999, replace = T) %>% matrix(ncol = 9) %>% as.data.table %>% {cbind.data.frame(id = 1:nrow(.), .)} t1[V1 !

我想创建与下面的最小可复制示例相同的结果,但您可以看到最后一个代码的子集条件基本上是删除行,其中.SD列不应全部为零

library(dplyr)

library(data.table)

set.seed(1)

t1 <- sample(-1:1, 999999, replace = T) %>% matrix(ncol = 9) %>% as.data.table %>% {cbind.data.frame(id = 1:nrow(.), .)}

t1[V1 != 0|V2 != 0|V3 != 0|V4 != 0|V5 != 0|V6 != 0|V7 != 0|V8 != 0|V9 != 0, lapply(.SD, sum), by = id]

我们可以使用
Reduce

i1 <- t1[, .I[Reduce(`|`, lapply(.SD, `!=`, 0))], .SDcols = V1: V9]
out2 <- t1[i1, lapply(.SD, sum), by = id]

i1我们可以使用
Reduce

i1 <- t1[, .I[Reduce(`|`, lapply(.SD, `!=`, 0))], .SDcols = V1: V9]
out2 <- t1[i1, lapply(.SD, sum), by = id]
i1使用
rowSums()

使用
rowSums()

out1 <- t1[V1 != 0|V2 != 0|V3 != 0|V4 != 0|V5 != 0|V6 != 0|V7 != 0|V8 != 0|V9 != 0, lapply(.SD, sum), by = id]  
identical(out1, out2)
#[1] TRUE
t1[t1[, rowSums(.SD != 0) > 0, .SD = patterns("V\\d")]
   ][, lapply(.SD, sum), by = id]