【问题标题】:in R summarizing data and add different mutate在 R 中汇总数据并添加不同的变异
【发布时间】:2021-04-20 15:32:16
【问题描述】:

我想在数据清理后最后总结一下我的数据。

这是我的数据结构:

structure(list(ID = structure(c(1L, 3L, 4L, 2L, 2L, 3L, 3L, 3L, 
3L, 4L, 4L, 4L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L), .Label = c("01002", 
"01004", "01005", "01006", "01009", "01011"), class = "factor"), 
    date = structure(c(17645, 17645, 17645, 17646, 17646, 17646, 
    17646, 17646, 17646, 17646, 17648, 17646, 17648, 17646, 17648, 
    17646, 17646, 17646, 17649, 17646), class = "Date"), category = structure(c(1L, 
    1L, 1L, 2L, 4L, 7L, 3L, 3L, 1L, 6L, 6L, 6L, 7L, 7L, 7L, 6L, 
    2L, 5L, 3L, 3L), .Label = c("A", "B", "C", "D", "F", "G", 
    "Q"), class = "factor"), level = c(3000, 3000, 1000, 1000, 
    1000, 9999, 9999, 9999, 9999, 9999, 9999, 9999, 8000, 9999, 
    9999, 9999, 300, 300, 300, 9999)), class = "data.frame", row.names = c(NA, 
-20L))

这是我目前的代码:

dataDF %>% 
  dplyr::group_by(category) %>% 
  dplyr::summarize(n = n()) %>%
  dplyr::mutate(percentage = (prop.table(n))*100) %>%
  arrange(desc(n))

结果如下:

  category     n percentage
  <fct>    <int>      <dbl>
1 A            4         20
2 C            4         20
3 G            4         20
4 Q            4         20
5 B            2         10
6 D            1          5
7 F            1          5

现在我想添加一个包含日期聚合的新列。

我需要为每个类别添加每个 ID 的平均计数日期。

这是数据的样子(随机数,未计算)。

  category     n percentage mean_reported_days_per_ID
  <fct>    <int>      <dbl>    <int> 
1 A            4         20     2
2 C            4         20     3.4
3 G            4         20     4
4 Q            4         20     1
5 B            2         10     3.5
6 D            1          5     2
7 F            1          5     1.1

我不确定如何实现。我尝试添加另一个 mutate() 并计算每个 ID 的平均天数并将其(与另一个分组依据)添加到数据表中。

感谢您的帮助!

【问题讨论】:

    标签: r dataframe dplyr summary


    【解决方案1】:

    您想要每个类别的每个 ID 的平均唯一日期?

    你只需要分组和总结两次:

    require(dplyr)
    
    dataDF %>% 
      group_by(ID, category) %>%
      summarise(distinctDates = n_distinct(date)) %>% 
      group_by(category) %>% 
      summarise(mean(distinctDates))
      
    #   category `mean(distinctDates)`
    #   <fct>                    <dbl>
    # 1 A                         1.33
    # 2 B                         1   
    # 3 C                         1   
    # 4 D                         1   
    # 5 F                         1   
    # 6 G                         1   
    # 7 Q                         1 
    
    

    如果您想将这些值加入您现有的 DF,只需执行 left_join(your.existing.df, this.new.df, by = "category")

    【讨论】:

    • 是的,我想要每个类别的每个 ID 的平均唯一日期。我会试试!谢谢。
    猜你喜欢
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    相关资源
    最近更新 更多