我正在尝试为多个变量按组计算插值中位数。 我的数据框如下所示:
# A tibble: 6 x 8
id eu_image eu_insurance eurobonds free_movement_welfare eu_cn_solidarity country_code country_party_mass
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl+lbl> <chr>
1 CAWI200000100 4 4 4 3 3 2 germany_7
2 CAWI300000784 2 2 1 1 1 3 italy_9
3 CAWI100000787 3 3 2 2 3 1 france_13
4 CAWI500000081 3 2 2 1 3 5 spain_2
5 CATI500000067 4 3 2 2 6 5 spain_3
6 CAWI100000398 2 4 4 2 5 1 france_2
当我运行以下代码以计算分组变量 country_party_mass 的插值平均值时:
party_median <- newdata %>%
group_by(country_party_mass) %>%
dplyr::summarise_at(c( "eu_image",
"eu_cn_solidarity",
"eurobonds",
"free_movement_welfare",
"eu_insurance"),
funs(interp.median(., na.rm=TRUE))) %>%
as.data.frame()
我收到以下错误:
summarise_impl(.data,点)中的错误:
eu_cn_solidarity
列的长度必须为1(汇总值),而不是0
我已经检查过有关类似问题的先前问题,但是找不到可行的解决方案。
答案 0 :(得分:2)
以A. Suliman的评论为基础:
您可以添加ifelse
函数来检查是否所有条目都是NA
:
party_median <- newdata %>%
group_by(country_party_mass) %>%
dplyr::summarise_at(vars(c("eu_image",
"eu_cn_solidarity",
"eurobonds",
"free_movement_welfare",
"eu_insurance")),
~ifelse(all(is.na(.)), NA_real_, interp.median(., na.rm=TRUE)))
请注意,funs
函数现在已被软弃用(从dplyr 0.8.0.1开始),因此我改用“〜”表示法。另外,我使用vars
函数来选择变量。