我嘗試創建一個子集,在給定另一個變數 A == 1 的情況下,我洗掉變數 B 的所有答案 == 0。但是,我想將 NA 保留在變數 B 中(只需洗掉 0)。
我用這個嘗試過,df2 <- subset(df, B[df$A == 1] > 0)但結果沒有意義。有人可以幫忙嗎?
i <- c(1:10)
A <- c(0,1,1,1,0,0,1,1,0,1)
B <- c(0, 10, 13, NA, NA, 9, 0, 0, 3, NA)
df <- data.frame(i, A, B)
uj5u.com熱心網友回復:
subset接受一個條件并僅回傳值為 的行TRUE。如果你嘗試NA == 0,或者NA != 0它總是會回傳NA,這既不是也不TRUE是FALSE,但是subset它只會回傳值所在的行TRUE。有多種方法可以解決這個問題:
subset(df, !(A == 1 & B == 0) | is.na(B))
或者:
subset(df, !(A == 1 & B %in% 0))
然而,還有更多的選擇
uj5u.com熱心網友回復:
如果我理解正確,這應該有效:
subset(df, (df$A == 1) & ((df$B != 0) | (is.na(df$B))))
輸出:
i A B
2 1 10
3 1 13
4 1 NA
10 1 NA
uj5u.com熱心網友回復:
如果您不想指定每一列,您可以將0toNA和 the NA(臨時)更改為一個數字(例如 999/-999)并在完成后切換回來。
i <- c(1:10)
A <- c(0,1,1,1,0,0,1,1,0,1)
B <- c(0, 10, 13, NA, NA, 9, 0, 0, 3, NA)
df <- data.frame(i, A, B)
df[is.na(df)] <- 999
df[df==0] <- NA
df <- na.omit(df)
df[df==999] <- NA
i A B
2 2 1 10
3 3 1 13
4 4 1 NA
10 10 1 NA
uj5u.com熱心網友回復:
如果i是唯一的,請確定要洗掉的案例并選擇其余案例,請嘗試:
df[df$i != subset(df, A==1 & B==0)$i, ]
輸出:
i A B
1 1 0 0
2 2 1 10
3 3 1 13
4 4 1 NA
5 5 0 NA
6 6 0 9
9 9 0 3
10 10 1 NA
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/391178.html
標籤:r
