我有一个数据框:
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,并且没有版本的重塑形式。
有什么建议吗? 干杯!
答案 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