我有一个像这样的数据框
V1 V2 V3 V4 month year
1 -1 9 1 1 1989
1 -1 9 1 1 1989
4 -1 9 1 2 1989
3 2 7 3 1 1990
4 4 8 2 2 1990
3 6 9 2 2 1990
4 7 0 2 2 1990
5 8 4 2 2 1990
其中前4行表示单元格1,2,3,4中数量A的值,后两列表示月份和年份。我想要做的是计算每个单元格的月平均值A,最后得到一个列表
V1
1989
<A>jen <A>feb ..
1 4
1990
<A>jen <A>feb ..
3 4
V2
V3
非常感谢
答案 0 :(得分:1)
我仍然希望在你的问题中更确切地说明你想要的输出是什么,但是由于你没有更新那部分,我将提供两个选项。
aggregate
似乎是一个非常简单的工具,特别是如果坚持使用“宽”格式可以满足您的需求。
aggregate(. ~ year + month, mydf, mean)
# year month V1 V2 V3 V4
# 1 1989 1 1 -1.00 9.00 1
# 2 1990 1 3 2.00 7.00 3
# 3 1989 2 4 -1.00 9.00 1
# 4 1990 2 4 6.25 5.25 2
如果您更喜欢“长”格式的数据,您应该浏览“reshape2”软件包,该软件包只需几步即可处理重塑和聚合。
library(reshape2)
mydfL <- melt(mydf, id.vars = c("year", "month"))
## The next step is purely cosmetic...
mydfL$month <- factor(month.abb[mydfL$month], month.abb, ordered = TRUE)
head(mydfL)
# year month variable value
# 1 1989 Jan V1 1
# 2 1989 Jan V1 1
# 3 1989 Feb V1 4
# 4 1990 Jan V1 3
# 5 1990 Feb V1 4
# 6 1990 Feb V1 3
## This is the actual aggregation and reshaping step...
out <- dcast(mydfL, variable + year ~ month,
value.var = "value", fun.aggregate = mean)
out
# variable year Jan Feb
# 1 V1 1989 1 4.00
# 2 V1 1990 3 4.00
# 3 V2 1989 -1 -1.00
# 4 V2 1990 2 6.25
# 5 V3 1989 9 9.00
# 6 V3 1990 7 5.25
# 7 V4 1989 1 1.00
# 8 V4 1990 3 2.00