如何在 R 中筛选数据帧的每一列中的 NA



我有一个 tibble as

DF_TEST = tibble('country'=c('a','a','a','a'),
'id'=c(3,3,3,3),
'shop'=c('dmart','dmart','dmart','dmart'),
'beef'=c(23,NA,NA,NA),
'eggs'=c(NA,33,NA,NA),
'fork'=c(NA,NA,10,NA),
'veg'=c(NA,NA,NA,40))

这里输出为,

country    id shop   beef  eggs  fork   veg
<chr>   <dbl> <chr> <dbl> <dbl> <dbl> <dbl>
1 a           3 dmart    23    NA    NA    NA
2 a           3 dmart    NA    33    NA    NA
3 a           3 dmart    NA    NA    10    NA
4 a           3 dmart    NA    NA    NA    40

我想通过保留一面 NA 来转换这个 tibble,如下所示

country    id shop   beef  eggs  fork   veg
<chr>   <dbl> <chr> <dbl> <dbl> <dbl> <dbl>
1 a           3 dmart    23    33    10    40

你能写下你的建议如何完成它吗?

一个dplyr解决方案可能是:

DF_TEST %>%
group_by_at(1:3) %>%
summarise_all(~ first(na.omit(.)))
country    id shop   beef  eggs  fork   veg
<chr>   <dbl> <chr> <dbl> <dbl> <dbl> <dbl>
1 a           3 dmart    23    33    10    40

Base R 一行:

aggregate(.~country+id+shop, replace(DF_TEST, is.na(DF_TEST), as.numeric(0)), FUN = sum)