顺序拆分数据帧R.

时间:2014-02-18 13:04:29

标签: r

我有一个像这样的数据框

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

非常感谢

1 个答案:

答案 0 :(得分:1)

我仍然希望在你的问题中更确切地说明你想要的输出是什么,但是由于你没有更新那部分,我将提供两个选项。

选项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

选项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