繁体   English   中英

在 R 数据帧中聚合数据

[英]Aggregating Data in R Data Frame

我有一个类似于下面的 csv 文件:

名称 - 年份 - 类型 - 销售

1 - 2005 - 行动 - 1

2 - 2005 - 行动 - 2

3 - 2005 - 射手 - 3

4 - 2006 - 角色扮演游戏 - 2

5 - 2006 - 角色扮演游戏 - 2

6 - 2007 - 行动 - 1

7 - 2007 - 射手 - 3

8 - 2007 - 角色扮演游戏 - 2

...

我的最终目标是在 R 中制作一个沙图,在 y 轴上显示每种类型的总销售额,在 x 轴上显示年份,标签是类型。

我需要总结每个流派每年的销售额,例如 2005 年的销售额是动作:3,射击:3,RPG:0。 并且每年都这样做。

这最终会给我一个如下所示的数据框:

 Action  Shooter  RPG  

2005 3 3 0

2006 0 0 4

2007 1 3 2

在 Python 中,我可以使用枚举来做到这一点,但我很难在 R 中弄清楚这一点。

这是我到目前为止所拥有的

vg <- read.csv("vgdata.csv")

genres <- unique(vg$Genre)
years <- sort(unique(vg$Year))

genredf <-data.frame(vg$Genre)
i<-0
for (year in (unique(vg$Year))) {
  yeardata = rep(0,length(genres))
}

这会给我一个带有 0 的数据框。 现在我正在尝试添加数据的总和,以便绘制图表。

很抱歉格式不好。 我还是堆栈溢出的新手。

我们可以使用xtabs

xtabs(Sales ~ Year + Genre, df1)

这是使用reshape + aggregate的基本 R 解决方案(但似乎不像xtabs @akrun的方法那么简单)

dfout <- reshape(aggregate(Sales~Year + Genre,df,sum),
                 direction = "wide",
                 idvar = "Year",
                 timevar = "Genre")

这样

> dfout
  Year Sales.Action Sales.RPG Sales.Shooter
1 2005            3        NA             3
2 2007            1         2             3
3 2006           NA         4            NA

数据

df <- structure(list(Name = 1:8, Year = c(2005L, 2005L, 2005L, 2006L, 
2006L, 2007L, 2007L, 2007L), Genre = c("Action", "Action", "Shooter", 
"RPG", "RPG", "Action", "Shooter", "RPG"), Sales = c(1L, 2L, 
3L, 2L, 2L, 1L, 3L, 2L)), class = "data.frame", row.names = c(NA, 
-8L))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM