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
數據? 「不正確」的定義?我們不是讀心者。 –