删除包含应用于特定列的NA或0的列

时间:2017-01-04 09:22:32

标签: r dataframe

所以,我试图从我的数据框中删除列。我希望完全用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数据帧而不是拆分它。

提前感谢您的帮助。

1 个答案:

答案 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)