我有一个 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)