gpt4 book ai didi

R:如何同时传播、分组、汇总和变异

转载 作者:行者123 更新时间:2023-12-04 18:24:10 25 4
gpt4 key购买 nike

我要spread下面的数据(此处仅显示前 12 行)按“年份”列,返回按“国家/地区名称”分组的“订单”总和。然后计算 2014 年到 2015 年每个“国家/地区名称”的“订单”变化百分比。

CountryName     Days        pCountry     Revenue    Orders  Year
United Kingdom 0-1 days India 2604.799 13 2014
Norway 8-14 days Australia 5631.123 9 2015
US 31-45 days UAE 970.8324 2 2014
United Kingdom 4-7 days Austria 94.3814 1 2015
Norway 8-14 days Slovenia 939.8392 3 2014
South Korea 46-60 days Germany 1959.4199 15 2014
UK 8-14 days Poland 1394.9096 6. 2015
UK 61-90 days Lithuania -170.8035 -1 2015
US 8-14 days Belize 1687.68 5 2014
Australia 46-60 days Chile 888.72 2. 0 2014
US 15-30 days Turkey 2320.7355 8 2014
Australia 0-1 days Hong Kong 672.1099 2 2015

我可以使用较小的测试数据框来完成这项工作,但似乎只能返回无穷无尽的错误,例如“总和对因子没有意义”或“行的重复标识符”和完整数据。在阅读了 dplyr 文档并尝试了几个小时后,我已经放弃了。任何人都可以帮助此代码...
data %>% 
spread(Year, Orders) %>%
group_by(CountryName) %>%
summarise_all(.funs=c(Sum='sum'), na.rm=TRUE) %>%
mutate(percent_inc=100*((`2014_Sum`-`2015_Sum`)/`2014_Sum`))

预期的输出将是一个类似于下面的表格。 (注意:这些数字是为了说明目的,它们不是手工计算的。)
CountryName  percent_inc
UK 34.2
US 28.2
Norway 36.1
... ...

编辑

我不得不对变量名称进行一些编辑,请注意。

最佳答案

先求和,当你的数据仍然是长格式的时候,然后传播。下面是一个假数据的例子:

set.seed(2)
dat = data.frame(Country=sample(LETTERS[1:5], 500, replace=TRUE),
Year = sample(2014:2015, 500, replace=TRUE),
Orders = sample(-1:20, 500, replace=TRUE))

dat %>% group_by(Country, Year) %>%
summarise(sum_orders = sum(Orders, na.rm=TRUE)) %>%
spread(Year, sum_orders) %>%
mutate(Pct = (`2014` - `2015`)/`2014` * 100)

  Country `2014` `2015`        Pct
1 A 575 599 -4.173913
2 B 457 486 -6.345733
3 C 481 319 33.679834
4 D 423 481 -13.711584
5 E 528 551 -4.356061


如果你有很多年,在你准备好制作一个漂亮的输出表之前,将它保存为长格式可能更容易:
set.seed(2)
dat = data.frame(Country=sample(LETTERS[1:5], 500, replace=TRUE),
Year = sample(2010:2015, 500, replace=TRUE),
Orders = sample(-1:20, 500, replace=TRUE))

dat %>% group_by(Country, Year) %>%
summarise(sum_orders = sum(Orders, na.rm=TRUE)) %>%
group_by(Country) %>%
arrange(Country, Year) %>%
mutate(Pct = c(NA, -diff(sum_orders))/lag(sum_orders) * 100)

   Country  Year sum_orders        Pct
<fctr> <int> <int> <dbl>
1 A 2010 205 NA
2 A 2011 144 29.756098
3 A 2012 226 -56.944444
4 A 2013 119 47.345133
5 A 2014 177 -48.739496
6 A 2015 303 -71.186441
7 B 2010 146 NA
8 B 2011 159 -8.904110
9 B 2012 152 4.402516
10 B 2013 180 -18.421053
# ... with 20 more rows

关于R:如何同时传播、分组、汇总和变异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44687455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com