数据帧到矩阵而不使用重塑

时间:2013-05-20 15:59:45

标签: r dataframe reshape

我有一个数据框:

set.seed(1234)
mydata <- data.frame(d1=strsplit("AAABBCCCCCDD", "")[[1]],
d2=rnorm(12), d3=c("aba", "bbc", "ccb", "aba", "bbc", "ccb", "aba", "aba", "ccb", "bbc", "aba", "bbc"),
d4=c(101:103, 201:202, 301:305, 401:402))

我想要一个d1到d3的矩阵,其中包含每个d1中每个d3的总和。

我可以使用包重构,但问题是我使用的是R 3.0,并且没有版本的重塑形式。

有什么建议吗? 干杯!

3 个答案:

答案 0 :(得分:2)

首先,使用R 3.0重塑(和reshape2)工作正常。其次,我假设你总结d2而不是d3。您可以使用plyr

require(plyr)
ddply(mydata, .(d1), summarise, d2=sum(d2))

答案 1 :(得分:2)

这样做,无论你想要哪个变量。只需将d2切换到d4。

tapply(mydata$d2,mydata[,c("d1","d3")],sum)

结果是......

   d3
d1         aba        bbc         ccb
  A -1.2070657  0.2774292  1.08444118
  B -2.3456977  0.4291247          NA
  C -1.1213718 -0.8900378 -0.05839611
  D -0.4771927 -0.9983864          NA

答案 2 :(得分:2)

正如其他人所说,你的问题不明确。如果您只对sum作为聚合函数感兴趣,那么您只需使用xtabs

> xtabs(d2 ~ d1 + d3, mydata)
   d3
d1          aba         bbc         ccb
  A -1.20706575  0.27742924  1.08444118
  B -2.34569770  0.42912469  0.00000000
  C -1.12137182 -0.89003783 -0.05839611
  D -0.47719270 -0.99838644  0.00000000

要返回data.frame,请将整个内容包裹在as.data.frame.matrix中(不只是as.data.frame):

> as.data.frame.matrix(xtabs(d2 ~ d1 + d3, mydata))
         aba        bbc         ccb
A -1.2070657  0.2774292  1.08444118
B -2.3456977  0.4291247  0.00000000
C -1.1213718 -0.8900378 -0.05839611
D -0.4771927 -0.9983864  0.00000000