[英]Remove rows with all NA values after groupby r
我想在使用 group_by 后刪除所有具有 NA 的行。 這是一個示例數據集:
df=data.frame(Col1=c("B","B","C","D",
"P1","P2","P3")
,Col2=c(NA,8,NA,9,10,8,9)
,Col3=c(NA,7,6,8,NA,7,8)
,Col4=c(NA,NA,7,7,NA,7,7))
如果列值全部為 NA,我想按 Col1 分組並刪除行。 所以所需的 output 是:
列1 | 列2 | 列3 | 列4 |
---|---|---|---|
乙 | 8個 | 7 | 北美 |
C | 北美 | 6個 | 7 |
丁 | 9 | 8個 | 7 |
P1 | 10 | 北美 | 北美 |
P2 | 8個 | 7 | 7 |
P3 | 9 | 8個 | 7 |
任何幫助將非常感激。
不需要分組依據,只保留至少有 1 個非 na 列的行,不包括Col1 :
df[ rowSums(!is.na(df[, -1])) > 0, ]
# Col1 Col2 Col3 Col4
# 2 B 8 7 NA
# 3 C NA 6 7
# 4 D 9 8 7
# 5 P1 10 NA NA
# 6 P2 8 7 7
# 7 P3 9 8 7
你不需要group_by
,你可以使用if_any
。
library(dplyr)
filter(df, if_any(-Col1, ~ !is.na(.)))
# Col1 Col2 Col3 Col4
# 1 B 8 7 NA
# 2 C NA 6 7
# 3 D 9 8 7
# 4 P1 10 NA NA
# 5 P2 8 7 7
# 6 P3 9 8 7
在 r2evans 回答的幫助下,我能夠在使用 group_by 分組后刪除 NA。 感謝所有回答的人。
library(dplyr)
df %>% group_by(Col1) %>% filter(if_any(everything(), ~ !is.na(.)))
Col1 Col2 Col3 Col4
B 8 7 NA
C NA 6 7
D 9 8 7
P1 10 NA NA
P2 8 7 7
P3 9 8 7
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.