我尝试选择行中的值满足特定条件(例如,在指定范围内)的列(变量)。
我的数据:
structure(list(X1 = c(35L, 45L, 67L, 890L, 23L, 4L, 5L, 34L,
78L, 12L, 3L), X2 = c(100L, 2345L, 3467L, 235L, 46L, 76L, 32L,
17L, 346L, 789L, 32L), X3 = c(345L, 67L, 45L, 342L, 67L, 31L,
6L, 78L, 9L, 34L, 23L), X4 = c(23L, 45L, 657L, 231L, 456L, 342L,
56L, 44567L, 3211L, 2342L, 2L)), row.names = c(NA, -11L), class = c("data.table",
"data.frame"))
作为一个简单的例子,只找到一个值:
out <- dt[, lapply(.SD, function(x) which(x == 5))]
上面生成了一个所有列都存在且具有NA值的表
X1 X2 X3 X4
7 NA 4 NA
通过这样做,我可以去掉这些NA值,从而得到我想要的列数。
out2 <- out %>% select_if(~ !any(is.na(.)))
X1 X3
7 4
问题:
1.有什么方法可以用data.table和一行代码来完成这个任务吗?
1.如何指定值的范围,例如(〉5 &〈1000)
1.在行中转置变量并使用类似dplyr filter_all这样的东西会不会更好?
任何帮助或正确方向的指示都将不胜感激。
2条答案
按热度按时间a14dhokn1#
不确定数据.表,但关于您的第二个问题:
这与select_if非常相似,它也回答了第三个问题:不,不需要改变形状/旋转。
irlmq6kh2#
使用
sapply
和with=FALSE
选择列具体数值:
范围: