删除groupby r后所有值均为NA的行

mcvgt66p  于 2023-02-06  发布在  其他
关注(0)|答案(3)|浏览(109)

我想在使用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))

我想groupby Col 1,如果列值都是NA,则删除行。因此,所需的输出为:
| 第1列|第2列|第3列|第4列|
| - ------|- ------|- ------|- ------|
| B|八个|七|不适用|
| C级|不适用|六个|七|
| D级|九|八个|七|
| P1级|十个|不适用|不适用|
| P2级|八个|七|七|
| P3级|九|八个|七|
任何帮助都将不胜感激。

lc8prwob

lc8prwob1#

您不需要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
fnx2tebb

fnx2tebb2#

不需要group-by,仅保留至少有1个非na列的行,不包括 * Col 1 *:

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
6kkfgxo0

6kkfgxo03#

在r2evans answer的帮助下,我能够在使用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

相关问题