如何在数据框中删除包含和不包含缺失值的非信息性列

时间:2017-05-17 13:55:02

标签: r

我有一个大型数据集,如下所示:

M1 = c("A", "A", "A")
M2 = c("C", "G", "C")
M3 = c("T", "", "T")
M4 = c("G", "G", "G/C")
M5 = c("T", "T/C", "")
mydata = data.frame(M1, M2, M3, M4, M5)
mydata

我想要做的是删除每行中具有相同字符的列,例如M1和M3,它们也具有缺失值。 我已设法删除数据集中的“M1”列,在dyrt中使用命令“drop_noninformative_columns(x)”,但很难删除其中缺少值的“M3”列而不删除所有缺少值的列。

如果有人能给我一些很棒的想法!

谢谢!

1 个答案:

答案 0 :(得分:0)

正如@Frank所提到的,您可以使用uniqueapply来查找哪些列没有信息值。在您的情况下,您需要先将所有空值和任何硬编码的“NA”值转换为NA。

mydata[mydata == ""] <- NA
mydata[mydata == "NA"] <- NA

然后,您可以使用它来过滤原始数据框,并仅保留具有多个唯一值的列:

mydata2 <- mydata[, apply(mydata, 2,function(x) length(unique(na.omit(x)))) > 1]