这是一个数据框:
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
然而,这是低效的。有没有删除任何具有空值的单元格?
答案 0 :(得分:2)
as.data.frame(sapply(df, function(x) x[x != "NULL"]))
# a b c
# 1 1 5 9
# 2 4 6 9
# 3 5 3 3
从此链接How to clean or remove NA values from a dataset without remove the column or row
由于它不是完全重复,因此添加了答案
答案 1 :(得分: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