【问题标题】:Making groups (group_by) depending on the column value with dplyr使用 dplyr 根据列值创建组 (group_by)
【发布时间】:2019-10-26 00:50:43
【问题描述】:

我想根据条件使用 dplyr 进行分组。例如,如果我们有下表:

A      B 
1      0
10     1
5      1
6      2

我会在 B = 0 时进行分组,在 B > 1 时进行分组,在 B > 2 时进行分组,依此类推。以下近似是错误的,但可能有助于理解:

df %>% 
   group_by(B > 0:2) %>% 
   summarize(Total = sum(A))

【问题讨论】:

  • B==0 或 B > 0?
  • 感谢您发布无效的代码 - 这有助于了解您的方法可能是什么。 (我猜 cmets 现在会因为以“+1”开头而被拒绝)

标签: r dplyr


【解决方案1】:

将group_by 与dplyr 一起使用时,行不能属于多个组。您需要映射值并反复进行过滤。这是一种方法

purrr::map_df(0:2, ~df %>% filter(B>.x) %>% summarize(b_greater_than=.x, Total=sum(A)))
#   b_greater_than Total
# 1              0    21
# 2              1     6
# 3              2     0

【讨论】:

  • 这是一个很好的解决方案,但我认为也许可以在没有其他功能的情况下直接完成。无论如何,它运作良好。
猜你喜欢
  • 1970-01-01
  • 2020-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多