[英]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.