这是50万行的小sampleData,这里的product,date和salesamount是一个因子变量。 我需要将数据除以2011年和2012年,并显示该产品及其当年销售额的总和。 我终于尝试了很多,我使用数据透视表在excel中做到了。 但我想知道如何在R中实现这一点,因为我不想要更多excel文件。 谢谢你
product date salesamount
a 2011-01 35
b 2011-02 40
c 2011-03 50
d 2011-01 55
b 2012-02 46
a 2011-02 35
d 2012-01 62
c 2012-03 56
c 2012-02 56
a 2012-03 38
b 2012-01 46
e 2011-03 60
a 2012-03 38
e 2012-02 67
d 2011-01 55
将数据除以年后数据应该是这样的
product year2011 year2012
a 70 76
b 40 92
c 50 112
d 110 62
e 60 67
答案 0 :(得分:2)
library(dplyr)
library(tidyr)
df %>%
separate(date, c('year', 'month')) %>%
group_by(product, year) %>%
summarise(salesamount = sum(salesamount)) %>%
spread(year, salesamount, sep = '')
# A tibble: 5 x 3 # Groups: product [5] product year2011 year2012 <chr> <int> <int> 1 a 70 76 2 b 40 92 3 c 50 112 4 d 110 62 5 e 60 67
答案 1 :(得分:1)
以下是awk '/^{/ {n++} n {print} n&&/^}/ {exit}'
的解决方案:
data.table
数据:强>
library("data.table")
DT[, year:=substr(date, 1, 4)]
dcast(DT, product ~ year, value.var="salesamount", fun.aggregate = sum)
# > dcast(DT, product ~ year, value.var="salesamount", fun.aggregate = sum)
# product 2011 2012
# 1: a 70 76
# 2: b 40 92
# 3: c 50 112
# 4: d 110 62
# 5: e 60 67
答案 2 :(得分:0)
假设dat对象为dat
,则基本tapply
方法为:
with( dat, tapply( salesamount, list( product, substring(date, 1,4) ), sum) )
2011 2012
a 70 76
b 40 92
c 50 112
d 110 62
e 60 67