我正在尝试动态过滤掉数据框中列的空值。为此,我需要将列名称作为函数参数传递,然后删除空值。我尝试了以下代码,它给出了一个错误,指出“警告消息:在is.na(tableMQproblem $ test)中:is.na()应用于类型为'NULL'的非(列表或向量)” : -
library(dplyr)
tabledata <- read.csv("data.csv",head=TRUE,sep= ',',check.names=FALSE)
tabledata[tabledata == ""] <- NA
x<-function(test)
{
tabledata <- tabledata[!(is.na(tabledata$`test`)), ]
}
table_finalC <- x("confi Itm")
我的测试数据 -
structure(list(R_co = structure(c(2L, 3L, 1L), .Label = c(" ",
"A220", "B334"), class = "factor"), confi_Itm = structure(c(2L,
1L, 1L), .Label = c("", "CFMX1"), class = "factor")), .Names = c("R_co",
"confi_Itm"), row.names = c(NA, 3L), class = "data.frame")
我试图首先从confi_Itm中删除空值,输出应该是 - :
R_co confi_Itm
1 A220 CFMX1
PS - tabledata&lt; - tabledata [!(is.na(tableMQproblem $ test
)),] - 这里的测试包含在反引号中,因为我的列名有空格。我无法使用具有空格的列名来生成测试数据(我使用了下划线),但在我的情况下,真实数据有这个。
答案 0 :(得分:1)
我们可以使用空白元素rowSums
的{{1}},获取具有“0”空白的行的逻辑索引,并对数据集进行子集化。
''
我们用res <- droplevels(df[!rowSums(df==''),])
res
# R_co confi_Itm
#1 A220 CFMX1
(因为列为droplevels
类)包装它以删除未使用的factor
。