R重塑数据并汇总信息

R重塑数据并汇总信息,r,R,我有一个包含多年人均销售额的数据集。此处示例: yr_2008 <- data.frame(agent = c("agent1", "agent4", "agent1", "agent1", "agent1", "agent4"), sales = c(100, 200, 300, 130, 200, 400), year = 2008) yr_2009 <- data.frame(agent = c("agent1", "agent3", "agent4", "agent1", "

我有一个包含多年人均销售额的数据集。此处示例:

yr_2008 <- data.frame(agent = c("agent1", "agent4", "agent1", "agent1", "agent1", "agent4"), sales = c(100, 200, 300, 130, 200, 400), year = 2008)
yr_2009 <- data.frame(agent = c("agent1", "agent3", "agent4", "agent1", "agent3", "agent4", "agent1", "agent3", "agent4"), sales = c(200, 500, 200, 200, 100, 100, 200, 300, 200), year = 2009)
yr_2010 <- data.frame(agent = c("agent1", "agent4", "agent2", "agent2", "agent2", "agent4"), sales = c(130, 300, 100, 200, 100, 200), year = 2010)
sales <- rbind(yr_2008, yr_2009, yr_2010)

yr_2008这里有一个
dplyr
工作流。如果您将此数据按年份和代理进行分组,则可以计算每个代理每年的销售额和条目数。要将其转换为广泛的格式,请先使用
collect
使其更长,将销售和交易合并到一个列中,
unite
用度量值表示年份,这样您就有了“2009\u sales”之类的条目,然后使用
spread
将其转换为广泛的格式<代码>排列
还用
NA
填充缺少的值

库(tidyverse)
2008年年率%
价差(键=年,值=值,九月=)
销售摘要
#>#A tibble:4 x 7
#>代理yr2008\销售yr2008\交易yr2009\销售yr2009\交易
#>                                                  
#>1代理1 730 4 600 3
#>2代理4 600 2 500 3
#>3 agent3 NA 900 3
#>4 agent2不适用
#> # ... 还有两个变量:yr2010\u销售额、yr2010\u交易

由(v0.2.0)于2018年5月13日创建。

使用
dplyr
右键连接

sales$agent <- as.character(sales$agent)

sales %>% filter(year==2008) %>% group_by(agent) %>% 
  summarise(yr08_transaction=n(),yr08_sales=sum(sales)) %>% 
  right_join(sales[!duplicated(sales$agent),c('agent','year')],by="agent") %>%
  arrange(agent) %>% select(-year)

# A tibble: 4 x 3
agent yr08_transaction yr08_sales
<chr>            <int>      <dbl>
1 agent1                4        730
2 agent2               NA         NA
3 agent3               NA         NA
4 agent4                2        600
sales$agent%filter(year==2008)%%>%groupby(agent)%%
总结(yr08_事务=n(),yr08_销售=sum(销售))%>%
右键加入(销售[!重复(销售$agent),c('agent','year')),by=“agent”)%>%
安排(代理)%>%选择(-year)
#一个tibble:4x3
代理yr08\u交易yr08\u销售
1代理1 4 730
2 agent2 NA
3阿根纳
4代理4 2 600

这里有一个带有
数据表的选项。总结以获得“代理人”和“年份”分组的“销售”的观察数量和总和,并以“宽幅”格式进行分类

library(data.table)
dcast(setDT(sales)[, .(transaction = .N, Sumsales = sum(sales)), by = .(agent, year)],
     agent ~ substr(year, 3, 4), value.var = c('transaction', 'Sumsales'))

谢谢你!有没有办法将2009年、2010年等数据也显示在您显示的第二个输出数据的同一个表格中?所以我可以看到不同的代理多年来的表现?不用看不同的桌子?我想我可以过滤然后找到我得到的所有不同的数据帧,但我不确定是否有更简单的方法,特别是因为在不同的年份会有不同的代理进来,就像你想重塑成广泛的格式一样?所有数据都以长格式保存在
sales\u summary
中。请将我的问题略加编辑,以使后续问题更加清晰。请检查yr08交易的预期输出
sales$agent <- as.character(sales$agent)

sales %>% filter(year==2008) %>% group_by(agent) %>% 
  summarise(yr08_transaction=n(),yr08_sales=sum(sales)) %>% 
  right_join(sales[!duplicated(sales$agent),c('agent','year')],by="agent") %>%
  arrange(agent) %>% select(-year)

# A tibble: 4 x 3
agent yr08_transaction yr08_sales
<chr>            <int>      <dbl>
1 agent1                4        730
2 agent2               NA         NA
3 agent3               NA         NA
4 agent4                2        600
library(data.table)
dcast(setDT(sales)[, .(transaction = .N, Sumsales = sum(sales)), by = .(agent, year)],
     agent ~ substr(year, 3, 4), value.var = c('transaction', 'Sumsales'))