【问题标题】:R: Multiple levels of grouping in dplyr::summarise using lapplyR:使用 lapply 在 dplyr::summarise 中进行多级分组
【发布时间】:2018-01-18 18:03:03
【问题描述】:

我对 R 比较陌生,我似乎无法将列表标准应用于我试图总结的 data.frame。我一直在阅读一堆不同的帖子,但它们似乎只关注一个级别的分组,而不是第二个级别。

假设我的 df 看起来像这样(我的实际数据框要大得多。有 35 种不同的“代码”和大约 20 种不同的“颜色”)

    Code   Color   Value
[1] A      Red     10
[2] A      Blue    15
[3] A      Red     5
[4] B      Green   20
[5] B      Red     15 
[6] C      Green   10

理想情况下,我想创建一个汇总表,使我能够按代码对数据进行分组(我已经成功地使用 Group by 和 Split 做到了这一点),但我还想创建一个值的总和按标准“颜色”。目前,我只能通过逐个运行条件来完成此操作。

到目前为止,我已经能够做到这一点:

#this gives me the total value by each code, like a pivot or a sumif
dfsummary <-df %>% group_by(Code) %>% summarise (total = sum(Value))

#then I was able to come up with this to give me, by Code, value by Color.
dfsummary2 <- df %>% filter(Color == "Red") %>% group_by(Code) 
%>% summarise(sumRed = sum(Value))

dfsummary2中的结果是:

   Code   sumRed   
[1] A      15     
[2] B      15    
[3] C      0

我想要完成的是为所有“颜色”创建一个数据框,而不必单独指定每一个。

我想要的输出,我们称之为 dfsummaryall,看起来像:

    Code   sumRed   sumBlue  sumGreen
[1] A      15       15       0
[2] B      15       0        20
[3] C      0        0        10

这就是我被难住的地方。我可以单独运行每个,然后将它们合并到一个表中,但我想找到一种在应用函数中工作的方法(我想是 lapply)。这就是我绝对是新手的地方。

到目前为止,我的尝试是这样的:

colors <- c("Red","Blue","Green")

dfsummaryall <- lapply(colors, function(x){dftmp <- df %>%
dplyr::filter(Color == x) %>% group_by(Code) %>% 
summarise(x == sum(MktValue)

我知道“summarise(x == sum(MktValue)”部分肯定有问题,但我真的不知道如何解决这个问题。

任何帮助将不胜感激!

【问题讨论】:

  • df %&gt;% group_by(Code, Color) %&gt;% summarise(Sum = sum(Value)) %&gt;% tidyr::spread(Color, Sum, fill = 0)?
  • 我发现我做错了事。谢谢!这正是我所需要的。我想我从来没有想过 group_by 可以容纳多个级别。
  • 继续:如何处理然后提取不同代码组合的总和。假设您想从 dfsummaryall 中查看以下“代码”组合的所有列(“颜色”)的总和(代码 =“A”和“B”,代码 =“B”和“C”,代码 =“ A”和“C”)。 "

标签: r dplyr apply lapply


【解决方案1】:

来自 cmets 中的用户 duckmayr

df %>% group_by(Code, Color) %>% summarise(Sum = sum(Value)) %>% tidyr::spread(Color, Sum, fill = 0)

这非常适合我的目的。

【讨论】:

    猜你喜欢
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    相关资源
    最近更新 更多