我想通过计算一列中值的平均值来总结数据,条件是另一列中的值。下面是一个示例:
dat <- data.frame(group = c("A", "A", "A", "A", "B", "B", "B", "B"), xy = c(1:4, 1:4), val = 1:8) > dat group xy val 1 A 1 1 2 A 2 2 3 A 3 3 4 A 4 4 5 B 1 5 6 B 2 6 7 B 3 7 8 B 4 8
所需输出为:
group var val 1 A mean1_2 1.5 2 A mean3_4 3.5 3 B mean1_2 5.5 4 B mean3_4 7.5
我想过在dplyr中组合summarise
和case_when
,但这不起作用(或者我没有正确使用它)。
dat %>% group_by(group) %>% summarise(mean1_2 = case_when(xy %in% 1:2 ~ mean(val)), mean3_4 = case_when(xy %in% 3:4 ~ mean(val))) `summarise()` has grouped output by 'group'. You can override using the `.groups` argument. # A tibble: 8 x 3 # Groups: group [2] group mean1_2 mean3_4 <chr> <dbl> <dbl> 1 A 2.5 NA 2 A 2.5 NA 3 A NA 2.5 4 A NA 2.5 5 B 6.5 NA 6 B 6.5 NA 7 B NA 6.5 8 B NA 6.5
还有别的办法吗?我希望避免将数据扩展为宽格式。