2017-08-09 92 views
1

我有一個類似於此的數據框(不完全是這樣),我想要子集...我想刪除前兩列,最後兩列和所有列與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刪除列

回答

3

我們可以使用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