当我使用下面的代码时,它会给我所需的输出
subset(ndata,!is.na(ndata$LHeart_Failure))
当我以其他形式执行上述相同代码时
out <- "LHeart_Failure"
subset(ndata,!is.na(ndata$out))
它给了我错误:
logical(0)
Warning message:
In is.na(ndata$out) :
is.na() applied to non-(list or vector) of type 'NULL'
这里的ndata是.csv文件中的数据。 LHeart_Failure是列的名称,我希望通过该名称找到该特定列中没有“NA”的所有行(即LHeart_Failure中没有NA的所有行)。
答案 0 :(得分:2)
当我尝试在不存在的数据框列上调用is.na()
时,我收到此错误消息,例如
> ndata <- data.frame(v1=c(1:3), v2=c("one", "two", "three"))
> subset(ndata, !is.na(ndata$out))
[1] v1 v2
<0 rows> (or 0-length row.names)
Warning message:
In is.na(ndata$out) :
is.na() applied to non-(list or vector) of type 'NULL'
因此,在尝试使用它进行子集之前,应确保列out
实际存在。
我个人会避免使用subset
而是明确地对数据框进行子集化。根据您所写的内容,您似乎希望保留数据框ndata
中的行,其中out
列不的值为NA
。在这种情况下,您可以尝试:
ndata[!is.na(ndata$out), ]
答案 1 :(得分:1)
错误是因为数据结构ndata
不包含任何名为out
的列。使用命令:
out <- "LHeart_Failure"
您只需使用字符串内容out
创建变量"LHeart_Failure"
。如果您想使用out
作为LHeart_Failure
列的等效内容,则必须致电:
out <- ndata$LHeart_Failure
接着是
found_idxs <- which[!is.na(out)]
答案 2 :(得分:0)
ndata$out
假设数据out
中存在ndata
列。
如果您想使用已保存在out
中的字符串作为列名来过滤数据,我建议您这样做:
out <- "LHeart_Failure"
ndata[!is.na(ndata[,out]),]