[英]How to subset dataframe on factor levels when NA are present
我想在因子級別上對數據框進行子集化,但是當NA
存在時很難這樣做。 這是兩個比較數據框,一個在因子列中沒有NA
,一個在NA
:
df1 <- data.frame(v = c("ABC", "def", "ABC", "ghi"),
f = c(4.11, 3.22, NA, 7.44))
df2 <- data.frame(v = c(NA, "ABC", "def", "ABC", "ghi"),
f = c(2.33, 4.11, 3.22, NA, 7.44))
在df1
,因子級別的子集效果很好。 例如:
df1[!df1$v == "ABC",]
v f
2 def 3.22
4 ghi 7.44
相比之下, df2
子集化充滿了問題:
df2[!df2$v == "ABC",]
v f
NA <NA> NA
3 def 3.22
5 ghi 7.44
問題是雙重的:(i) df2$v
帶有<NA>
的行被包含,而它不應該包含在內,(ii) 它旁邊的值(即df2$f
下同一行的值)是NA
而該值應為2.33
。
我如何干凈正確地對df2
子集化,以便結果是這樣的:
v f
3 def 3.22
5 ghi 7.44
您可以使用以下代碼行
df2[!(df2$v == "ABC") & !is.na(df2$v), ]
# v f
# 3 def 3.22
# 5 ghi 7.44
或者這行,我更喜歡,因為我不必輸入幾個額外的括號
df2[df2$v != "ABC" & !is.na(df2$v), ]
# v f
# 3 def 3.22
# 5 ghi 7.44
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.