【问题标题】:R - Aggregate and count instances of grouping [duplicate]R - 聚合和计数分组实例[重复]
【发布时间】:2020-09-03 08:31:00
【问题描述】:

数据集是响应者的细分以及他们在给定时间段内的联系人数以及他们年龄段的详细信息,类似于:

participant    participant_age      contact      contact_age
     1               18-30             1            18-30
     1               18-30             2            30-40
     2               30-40             1            18-30
     3               18-30             1            18-30
     3               18-30             2            50-60

我的目标是计算每个年龄段的参与者与每个年龄段的接触者的平均接触次数。类似于:

   age_bracket   18-30    30-40    40-50
      18-30        1        3        2
      30-40        1.5      4        2
      40-50        3        4        1

我一直在尝试使用 dplyr 中的 group_by 和 spread 函数。我最接近的是使用

data%>%
  group_by(participant_age, contact_age) %>%
  tally() %>%
  spread(key = participant_age, value = n)

但这会产生每个联系人的总数 (n),而不是每个年龄段的平均联系人数。

【问题讨论】:

  • 如何将第一行 30-40 列的值设为 3?
  • 不是实际数据,只是一个例子

标签: r tidyverse


【解决方案1】:

在基础 R 中使用 tapply

t(with(dat, tapply(contact, list(contact_age, participant_age), mean)))
#       18-30 30-40 50-60
# 18-30     1     2     2
# 30-40     1    NA    NA

数据:

dat <- structure(list(participant = c(1L, 1L, 2L, 3L, 3L), participant_age = c("18-30", 
"18-30", "30-40", "18-30", "18-30"), contact = c(1L, 2L, 1L, 
1L, 2L), contact_age = c("18-30", "30-40", "18-30", "18-30", 
"50-60")), class = "data.frame", row.names = c(NA, -5L))

【讨论】:

    【解决方案2】:

    如果我正确理解了您的目标,那么您非常接近正确的解决方案:

    data %>%
     group_by(participant_age, contact_age) %>%
     summarise(mean = mean(contact), .groups = "drop") %>%
     spread(key = participant_age, value = mean)
    

    【讨论】:

      【解决方案3】:

      您可以使用pivot_wider 并传递函数以在values_fn 中申请:

      tidyr::pivot_wider(df, names_from = contact_age, values_from = contact, values_fn = mean)
      

      【讨论】:

        猜你喜欢
        • 2013-11-23
        • 2014-09-14
        • 1970-01-01
        • 2017-04-14
        • 2018-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-04
        相关资源
        最近更新 更多