【问题标题】:How to summarise data conditional on another variable in R?如何总结以 R 中的另一个变量为条件的数据?
【发布时间】:2023-02-08 16:53:33
【问题描述】:

我想通过以另一列中的值为条件计算一列中的值的平均值来总结数据。这是一个例子:

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 中组合 summarisecase_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

还有别的办法吗?我想避免将数据传播到宽格式。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    我不确定你的情况,但你可以试试

    dat %>%
      mutate(key = ceiling(xy/2)) %>%
      group_by(group, key) %>%
      summarise(var = paste0(xy, collapse = "_"),
                val = mean(val)) %>%
      mutate(var = paste0('mean',var)) %>%
      select(-key)
    
      group var       val
      <chr> <chr>   <dbl>
    1 A     mean1_2   1.5
    2 A     mean3_4   3.5
    3 B     mean1_2   5.5
    4 B     mean3_4   7.5
    

    【讨论】:

      猜你喜欢
      • 2016-10-21
      • 1970-01-01
      • 1970-01-01
      • 2022-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      相关资源
      最近更新 更多