簡體   English   中英

在 groupby r 之后刪除所有 NA 值的行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM