2016-05-16 82 views
2

這裏有一個數據幀:刪除與指定的值的所有單元格中的R

df <- data.frame('a' = c('NULL',1,4,5), 'b' = c(5,6,3,'NULL'), 'c' = c(9,'NULL',9,3)) 

輸出:

 a b c 
1 NULL 5 9 
2 1 6 NULL 
3 4 3 9 
4 5 NULL 3 

我所試圖做刪除所有的細胞,一個空值。一種方法是這樣的:

df2 <- data.frame('a' = subset(df, !(a == 'NULL'))$a, 
       'b' = subset(df, !(b == 'NULL'))$b, 
       'c' = subset(df, !(c == 'NULL'))$c) 

輸出:

a b c 
1 1 5 9 
2 4 6 9 
3 5 3 3 

然而,這是低效的。有沒有去除任何空值的單元格?

+1

可能是重複此問題http://stackoverflow.com/questions/34619124/how-to-clean-or-remove-na-values-from-a-dataset-without-remove-the-column - 或行 –

+0

謝謝,皮埃爾! –

回答

1

另一種解決方案,給出了同樣的答案,但也適用,如果有不同數量的「 NULL」中每一列的值:

#Works for original problem 
df <- data.frame('a' = c('NULL',1,4,5), 'b' = c(5,6,3,'NULL'), 'c' = c(9,'NULL',9,3)) 
res<-as.data.frame(sapply(df, function(x) { 
             c(as.numeric(levels(x))[x[x != "NULL"]], 
             rep("NULL",sum(x == "NULL"))) 
             })) 
res2 <- res[rowSums(res=="NULL")==0,]  

res2 
# a b c 
#1 1 5 9 
#2 4 6 9 
#3 5 3 3 

現在對於具有不同數量的示例‘在每列NULL’:

df <- data.frame('a' = c('NULL',1,4,5,6), 'b' = c("NULL",6,3,'NULL',7), 'c' = c(9,'NULL',"NULL","NULL",10)) 
res<-as.data.frame(sapply(df, function(x) { 
             c(as.numeric(levels(x))[x[x != "NULL"]], 
             rep("NULL",sum(x == "NULL"))) 
             })) 
res2 <- res[rowSums(res=="NULL")==0,]  

res2 
# a b c 
#1 1 6 9 
#2 4 3 10 
相關問題