當通過某些條件對data.frames進行子集化時,如果數據幀包含NA,則可能會出現由於條件而得到NA值。然後,它會令問題在子集化data.frame:索引數據幀中的NA值
# data generation
set.seed(123)
df <- data.frame(a = 1:100, b = sample(c("moon", "venus"), 100, replace = TRUE), c = sample(c('a', 'b', NA), 100, replace = TRUE))
# indexing
with(df, df[a < 30 & b == "moon" & c == "a",])
你得到:
a b c
NA NA <NA> <NA>
10 10 moon a
12 12 moon a
NA.1 NA <NA> <NA>
NA.2 NA <NA> <NA>
29 29 moon a
這是因爲條件導致載體含港定居,然後將這些NAS會產生上述結果的索引數據幀。
其中一個解決方案將是這些修補程序之一:
with(df, df[a < 30 & b == "moon" & (c == "a" & !is.na(c)),]) # exclude NAs
with(df, df[a < 30 & b == "moon" & (c == "a" | is.na(c)),]) # include NAs
,但這些都是非常笨拙的 - 假設你有很長的情況一樣 df[A == x1 & B == x2 & C == x3 & D == x4,]
,你必須包裝這樣的每一個元素 - df[(A == x1 | is.na(A)) & (B == x2 | is.na(B)) ...,]
。
是否有任何優雅的解決方案,這不需要你在控制檯上寫這些噸的代碼,如果你只是試圖檢查數據框?
這個問題可以做些什麼來排除值,而不增加咆哮。這種行爲在'?Extract',「愚蠢」或者沒有被廣泛記錄。 –
@ SimonO101:然後在那裏發佈答案,或者更新Shane的答案。我只是試圖讓有用的內容分散在多個問題上。 –