带有字符串向量的数据表多个条件 [英] Data table multiple condition with string vector

查看:61
本文介绍了带有字符串向量的数据表多个条件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想对数据表进行子集化,其条件是要对带有&的字符串向量中的所有列应用该条件之间的条件。示例:

I would like to subset a data table with a condition that I want to apply on all column in vector of strings with a & condition in between. Example:

library(data.table)    
test <- setDT(as.data.frame(list(ID = c(rep(1,10),rep(2,10)), time = rep(c(1:10),2),
                                 Input = rep(c(array(data = 0, dim = 5),1,array(data = 0, dim = 4)),2), 
                                 replicate(4,sample(c(1:20), 10, replace = TRUE)))))

signalcolumns <- colnames(test)[! colnames(test) %in% c("ID","Input","time")]

现在我要

test[X1 > 5 & X2 > 5 & X3 > 5 & X4 > 5]

,我想用signalcolumns编写它。

and I would like to write it with the signalcolumns.

test[get(signalcolumns) > 5]

无效,因为它仅在第一个X1列上设置了条件。我看不到我可以在这里使用什么语法。我虽然试图评估一个表达式,例如

doesn't work as it set the condition only on the first X1 column. I don't see what syntax I could use here. I though of trying to evaluate an expression like

c(paste0(signalcolumns[1:(length(signalcolumns)-1)],">5 &"),
paste0(signalcolumns[(length(signalcolumns)-1)],">5") )

但是我有点卡在这里。

推荐答案

.SDcols 作为 signalcolumns,循环遍历data.table的子集,检查其是否大于5,然后转换为每个行的单个向量 TRUE / FALSE以对行进行子集

After specifying the .SDcols as 'signalcolumns', loop through the Subset of data.table, check whether it is greater than 5, and then Reduce to a single vector of TRUE/FALSE for each row to subset the rows

test[test[, Reduce(`&`, lapply(.SD, `>`, 5)), .SDcols = signalcolumns]]

这篇关于带有字符串向量的数据表多个条件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆