2016-05-16 84 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 
相关问题