使用函数动态过滤列中的空值

时间:2016-01-29 13:04:58

标签: r function null dplyr

我正在尝试动态过滤掉数据框中列的空值。为此,我需要将列名称作为函数参数传递,然后删除空值。我尝试了以下代码,它给出了一个错误,指出“警告消息:在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)),] - 这里的测试包含在反引号中,因为我的列名有空格。我无法使用具有空格的列名来生成测试数据(我使用了下划线),但在我的情况下,真实数据有这个。

1 个答案:

答案 0 :(得分:1)

我们可以使用空白元素rowSums的{​​{1}},获取具有“0”空白的行的逻辑索引,并对数据集进行子集化。

''

我们用res <- droplevels(df[!rowSums(df==''),]) res # R_co confi_Itm #1 A220 CFMX1 (因为列为droplevels类)包装它以删除未使用的factor