我像这样运行了一段代码
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
我该怎么做?
答案 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
请注意,与上述解决方案NULL
或NA
不同,此处的值显示为0
。