尝试基于非空值从SQL借用数据框的子集。尝试一些类似的东西:
lately <- subset(data, year > 1997 & myvalue != NA)但这是不对的。有什么建议吗,R‘’sters?
发布于 2011-07-07 05:57:51
subset(data, year > 1997 & !is.na(myvalue))应该做这件事。你的版本不能工作的原因是foo != NA或foo == NA总是NA,因为我们不知道NA数据是什么。使用is.na()测试NA,如果您想要"not NA“,则使用!否定它。
例如:
> dat <- data.frame(year = 1995:2000, myvalue = c(1,3,4,NA,6,10))
> dat
year myvalue
1 1995 1
2 1996 3
3 1997 4
4 1998 NA
5 1999 6
6 2000 10
> subset(dat, year > 1997 & myvalue != NA)
[1] year myvalue
<0 rows> (or 0-length row.names)
> subset(dat, year > 1997 & !is.na(myvalue))
year myvalue
5 1999 6
6 2000 10进一步思考为什么你的版本不能工作是有指导意义的。
子句的第一部分返回:
> with(dat, year > 1997)
[1] FALSE FALSE FALSE TRUE TRUE TRUE对于前三个元素,我们不需要做任何进一步的检查,因为它们是假的,但我们需要检查示例中最后三个元素的第二个子句。第二个子句返回所有元素的NA,如上所述:
> with(dat, myvalue != NA)
[1] NA NA NA NA NA NA因此,combined子句返回:
> with(dat, year > 1997 & myvalue != NA)
[1] FALSE FALSE FALSE NA NA NA这将不会选择任何行,因此为您的示例返回的零行对象。
https://stackoverflow.com/questions/6603531
复制相似问题