用NA值填充列
问题描述:
我有一个类似于此的数据框(不完全是这样),我想要子集...我想删除前两列,最后两列和所有列与NA值...用NA值填充列
df <- read.table(text="
a b c d e f g h
1 5 6 NA 4 NA 7 9
3 2 8 NA 9 NA 4 3
6 5 2 NA 6 NA 1 1
",header=TRUE,stringsAsFactors = FALSE)
到目前为止,我只得到了这么远:
df[, (3:(ncol(df)-2))]
它不仅能消除前两个和最后两个......但我无法弄清楚如何与NA删除列
答
我们可以使用colSums
和序列创建一个逻辑向量子集列
i1 <- seq_along(df)
df[(!i1 %in% c(1:2, tail(i1,2))) & !colSums(is.na(df))]
# c e
#1 6 4
#2 8 9
#3 2 6
如果数据帧是由字符串组成?我们不能使用你知道的'colSums' – Onyambu
@Onyambu如果你检查代码,'colSums'是在基于NA值的逻辑矩阵'is.na(df)'上完成的。即使你有字符/因子列,只要NA是NA,那么它应该工作。 – akrun
我明白你的意思了。谢谢。 – Onyambu