在R中,我如何将聚合结果作为矩阵返回?

时间:2011-09-02 10:02:42

标签: r matrix aggregate

我像这样运行了一段代码

x = data.frame(numerator = 1:3, value = letters[1:3],value1=letters[4:6])
xa = aggregate(list(x$numerator),by=list(x$value,x$value1),FUN=sum)

但结果xa就是这样形成的

 Group.1 Group.2 X1.3
1       a       d    1
2       b       e    2
3       c       f    3

我希望我的结果以矩阵格式组织,以便行由Group.1值表示,列由Group.2值表示,如下所示:

    d e f
a   1 NULL NULL
b   NULL 2 NULL
c   NULL NULL 3

我该怎么做?

3 个答案:

答案 0 :(得分:3)

您可以使用plyr包中的daply。

xa = daply(.data=x,
           .variables=c("value","value1"),
           .fun=function(x) sum(x$numerator))

答案 1 :(得分:0)

我们可以使用BASE R功能:

  tapply(x$numerator,x[,2:3],I)
        value1
value  d  e  f
    a  1 NA NA
    b NA  2 NA
    c NA NA  3

答案 2 :(得分:0)

另一种选择是使用stats-package中的xtabs

x = data.frame(numerator = 1:3, value = letters[1:3],value1=letters[4:6])

然后像您一样使用aggregate函数:

xa = aggregate(list(x$numerator),by=list(x$value,x$value1),FUN=sum)

然后通过

将其转换为漂亮的矩阵
xb<-xtabs(X1.3~Group.1+Group.2,xa)


    Group.2
Group.1 d e f
      a 1 0 0
      b 0 2 0
      c 0 0 3

请注意,与上述解决方案NULLNA不同,此处的值显示为0