2016-06-17 30 views
9

Chcę użyć na.omit (danych) dla poniższego przykładowego zestawu danych, ale pod warunkiem, aby usunąć wiersze z NA tylko wtedy, gdy są obecne, powiedzmy "więcej niż 30%" kolumn.Jak usunąć wiersze z NA tylko wtedy, gdy są obecne w więcej niż pewnym procencie kolumn?

dane:

 C1  C2  C3  C4  C5 
Gene1 0.07 NA  0.05 0.07 0.07 
Gene2 0.2 0.18 0.16 0.15 0.15 
Gene3 NA  0.93 0.9 NA  0.92 
Gene4 0.32 0.05 0.12 0.13 0.05 
Gene5 0.44 0.53 0.46 0.03 0.47 
Gene6 NA  0.34 NA  0.8 NA 
Gene7 0.49 0.55 0.67 0.49 0.89 
Gene8 0.25 NA  0.49 NA  NA 
Gene9 0.1 0.1 0.05 NA  0.09 

więc plik wynikowy powinien być następujący:

 C1  C2  C3  C4  C5 
Gene1 0.07 NA  0.05 0.07 0.07 
Gene2 0.2 0.18 0.16 0.15 0.15 
Gene4 0.32 0.05 0.12 0.13 0.05 
Gene5 0.44 0.53 0.46 0.03 0.47 
Gene7 0.49 0.55 0.67 0.49 0.89 
Gene9 0.1 0.1 0.05 NA  0.09 

Dzięki za pomoc!

+0

Jak decydujesz, które wartości "NA" usunąć? –

+0

Cześć Tim, to nie zależy od NA. Tylko wtedy, gdy dla danego wiersza jest więcej niż 30% NA, należy całkowicie usunąć wiersz. – Letin

+0

Co próbowaliście? Pokaż trochę kodu. –

Odpowiedz

7

Można podzbiorem na podstawie sum wierszy z futra wartości:

test[!rowSums(is.na(test)) > ncol(test)*.3,] 

     C1 C2 C3 C4 C5 
Gene1 0.07 NA 0.05 0.07 0.07 
Gene2 0.20 0.18 0.16 0.15 0.15 
Gene4 0.32 0.05 0.12 0.13 0.05 
Gene5 0.44 0.53 0.46 0.03 0.47 
Gene7 0.49 0.55 0.67 0.49 0.89 
Gene9 0.10 0.10 0.05 NA 0.09 
+7

Wybrałbym 'dat [rowMeans (is.na (dat)) <= .3,]' –

4

Oto kolejna wersja z Reduce

df1[!Reduce(`+`, lapply(df1, is.na)) > ncol(df1)*0.3,] 
#  C1 C2 C3 C4 C5 
#Gene1 0.07 NA 0.05 0.07 0.07 
#Gene2 0.20 0.18 0.16 0.15 0.15 
#Gene4 0.32 0.05 0.12 0.13 0.05 
#Gene5 0.44 0.53 0.46 0.03 0.47 
#Gene7 0.49 0.55 0.67 0.49 0.89 
#Gene9 0.10 0.10 0.05 NA 0.09 
+2

dat [Reduce ('+', lapply (dat, is.na))

4

I tutaj kolejna opcja korzystania zastosować

dat[apply(dat,1,function(x){sum(is.na(x))/dim(dat)[2]})<0.3,] 

#C1 C2 C3 C4 C5 
#Gene1 0.07 NA 0.05 0.07 0.07 
#Gene2 0.20 0.18 0.16 0.15 0.15 
#Gene4 0.32 0.05 0.12 0.13 0.05 
#Gene5 0.44 0.53 0.46 0.03 0.47 
#Gene7 0.49 0.55 0.67 0.49 0.89 
#Gene9 0.10 0.10 0.05 NA 0.09