用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 
+0

如果数据帧是由字符串组成?我们不能使用你知道的'colSums' – Onyambu

+1

@Onyambu如果你检查代码,'colSums'是在基于NA值的逻辑矩阵'is.na(df)'上完成的。即使你有字符/因子列,只要NA是NA,那么它应该工作。 – akrun

+2

我明白你的意思了。谢谢。 – Onyambu