【发布时间】:2023-03-22 16:30:02
【问题描述】:
我有一个看起来像这样的数据框
df <- data.frame("Month" = c("April","April","May","May","June","June","June"),
"ID" = c(11, 11, 12, 10, 11, 11, 11),
"Region" = c("East", "West", "North", "East", "North" ,"East", "West"),
"Qty" = c(120, 110, 110, 110, 100, 90, 70),
"Sales" = c(1000, 1100, 900, 1000, 1000, 800, 650),
"Leads" = c(10, 12, 9, 8, 6, 5, 4))
Month ID Region Qty Sales Leads
April 11 East 120 1000 10
April 11 West 110 1100 12
May 12 North 110 900 9
May 10 East 110 1000 8
June 11 North 100 1000 6
June 11 East 90 800 5
June 11 West 70 650 4
我想要一个看起来像这样的数据框
Month ID Qty Sales Leads Region
April 11 230 2100 22 East
May 12 110 900 9 North
May 10 110 1000 8 East
June 11 260 2450 15 North
我正在使用以下代码
result <- df %>% group_by(Month, ID) %>% mutate(across(.cols = Qty:Leads, ~sum(.x, na.rm = T))) %>% slice(n = 1)
result$Region <- NULL
我有超过 200 万个这样的行,而且要花很长时间来计算汇总。
我使用 mutate 和 slice 而不是 summarise,因为 df 以某种方式排列,我想在第一行保留 Region。
但是我认为可能有更有效的方法。请在这两个方面提供帮助。我这辈子都想不通。
【问题讨论】:
-
您的代码无法创建您预期的输出。我可以看到您想保留某个顺序,但我不明白为什么您不能通过在汇总后排列数据框来做到这一点。
-
你说你使用了这个代码
df %>% group_by(month, ID) %>% mutate(across(.cols = Qty:Leads, ~sum(.x, na.rm = T))) %>% slice(n = 1)(注意month应该是Month)来产生预期的结果。但是使用summarize的结果是相同的。使用mutate或summarize在这两种方法中更改顺序。所以我不明白为什么你不能使用summarize。无论如何,您必须安排数据框。 -
此外,您使用
result$Region <- NULL在代码中故意删除了Region列,但您的预期结果包含该列。我只是不明白你做了什么,你的期望是什么。
标签: r dplyr group-by summarize