3
试图根据从SQL借用的数据框的子集获取非空值。尝试像这样:检查子集中的定义值()
lately <- subset(data, year > 1997 & myvalue != NA)
但这是不对的。任何提示,r'sters?
试图根据从SQL借用的数据框的子集获取非空值。尝试像这样:检查子集中的定义值()
lately <- subset(data, year > 1997 & myvalue != NA)
但这是不对的。任何提示,r'sters?
subset(data, year > 1997 & !is.na(myvalue))
应该这样做。您的版本不起作用的原因是foo != NA
或foo == NA
始终是NA
,因为我们不知道NA
数据是什么。使用is.na()
来测试NA
,如果你想要“不是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
对于我们并不需要做任何进一步的检查,因为它们是假的前3个元素,但我们需要检查一下第二条条款的最后示例中有三个元素。第二子句返回NA
所有元素,如以上所讨论的:
> with(dat, myvalue != NA)
[1] NA NA NA NA NA NA
因此,合并的子句返回:
> with(dat, year > 1997 & myvalue != NA)
[1] FALSE FALSE FALSE NA NA NA
这将最终没有选择任何行,并且因此零行对象返回的为你举例。
谢谢你的深思。 – Wells
数据? “不正确”的定义?我们不是读心者。 –