gpt4 book ai didi

r - 检查 subset() 中定义的值

转载 作者:行者123 更新时间:2023-12-04 11:30:36 26 4
gpt4 key购买 nike

尝试根据不为空的值(从 SQL 借用)获取数据框的子集。尝试类似的东西:

lately <- subset(data, year > 1997 & myvalue != NA)

但这是不对的。姐妹们,有什么建议吗?

最佳答案

subset(data, year > 1997 & !is.na(myvalue))

应该这样做。您的版本不起作用的原因是 foo != NAfoo == 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 个元素,我们不需要做任何进一步的检查,因为它们是 FALSE,但我们需要检查示例中最后三个元素的第二个子句。如上所述,第二个子句为所有元素返回 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

这将最终不选择任何行,因此为您的示例返回零行对象。

关于r - 检查 subset() 中定义的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6603531/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com