试图从SQL借用非空的值来获取数据帧的子集.尝试类似的东西:
lately <- subset(data, year > 1997 & myvalue != NA)
Run Code Online (Sandbox Code Playgroud)
但那不对.任何提示,rsters?
subset(data, year > 1997 & !is.na(myvalue))
Run Code Online (Sandbox Code Playgroud)
应该这样做.你的版本不起作用的原因是,foo != NA或者foo == NA总是NA因为我们不知道NA基准是什么.使用is.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
Run Code Online (Sandbox Code Playgroud)
进一步思考为什么你的版本不起作用是有益的.
该条款的第一部分返回:
> with(dat, year > 1997)
[1] FALSE FALSE FALSE TRUE TRUE TRUE
Run Code Online (Sandbox Code Playgroud)
对于前3个元素,我们不需要进行任何进一步的检查,因为它们是FALSE,但是我们需要检查示例中最后三个元素的第二个子句.如上所述,第二个子句返回NA所有元素:
> with(dat, myvalue != NA)
[1] NA NA NA NA NA NA
Run Code Online (Sandbox Code Playgroud)
因此,合并条款返回:
> with(dat, year > 1997 & myvalue != NA)
[1] FALSE FALSE FALSE NA NA NA
Run Code Online (Sandbox Code Playgroud)
最终不会选择任何行,因此为您的示例返回零行对象.
| 归档时间: |
|
| 查看次数: |
1669 次 |
| 最近记录: |