所以,我试图从我的数据框中删除列。我希望完全用NA或0填充的那个消失了。
我用这个:
tmp <- Filter(function(x)(!all(is.na(x) | (x == "0"))), tmp)
这可以按预期工作。我的问题只是我希望这个函数不是应用于我的df的所有列,而是应用于特定的列。我知道要使用此函数的列名,所以我尝试了:
tmp <- Filter(function(x)(!all(is.na(x) | (x == "0"))) & colnames[x] %in% errornames_c, tmp)
但它不起作用。我也试过
tmp[, 14:ncol(tmp)] <- Filter(function(x)(!all(is.na(x) | (x == "0"))), tmp[, 14:ncol(tmp)])
因为我只希望将这个应用到第14列,直到最后一个,但它也没有给出预期的结果。
我找到了几个类似的帖子,但没有适合我需要的适当答案。
总而言之,我知道我希望应用该函数的列的名称,同时保留其他函数,如果在这种情况下名称不方便使用,则必须保留列1:14,并保留14最后一个应该是目标。我更愿意使用整个tmp数据帧而不是拆分它。
提前感谢您的帮助。
答案 0 :(得分:1)
我们可以用
来做到这一点cbind(tmp[,1:13], Filter(function(x) !(all(is.na(x)) | all(x == "0")), tmp[, 14:ncol(tmp)] ))
tmp <- data.frame(v1 = 0, v2 = c(NA, 1:3), v3 = c(NA, 0, 2, 1),
v4 = NA, v5 = 1:4, v6= c(NA, NA, NA, 0))
set.seed(24)
tmp <- cbind(as.data.frame(matrix(rnorm(13*4), ncol=13)), tmp)