我有一个data.table我想要一个子集,只包含那些长度大于length_x的列。
DT[, lapply(.SD, function(x) sum(!is.na(x)) > length_x)]
还有
DT[, lapply(.SD, function(x) sum(!is.na(x)) > length_x), with = FALSE]
将仅返回一个逻辑向量,为每个列分配TRUE或FALSE。
答案 0 :(得分:0)
输出是每个元素长度为1的list
逻辑向量。我们可以unlist
使用它来创建逻辑vector
并将其用于子集列
i1 <- DT[, unlist(lapply(.SD, function(x) sum(!is.na(x)) > length_x))]
DT[, i1, with = FALSE]
或使用colSums
DT[, DT[, colSums(!is.na(.SD)) > length_x], with = FALSE]
set.seed(24)
DT <- as.data.table(matrix(sample(c(NA, 1:3), 10 * 5,
replace = TRUE), nrow = 10))
length_x <- 6