使用acast时继续对data.frame进行排序

时间:2013-09-20 12:09:50

标签: r

当我在R中使用acast时,我的数据框的排序变得混乱。想象一下我的data.frame看起来像这样

  V1 V2 V3
1  D  Y  0
2  E  X  0
3  C  N  0
4  B  M  0
5  A  S  0

执行acast(dd, V1 ~ V2, value.var="V3", fill = 0)将产生有序矩阵,例如

  M N S X Y
A 0 0 0 0 0
B 0 0 0 0 0
C 0 0 0 0 0
D 0 0 0 0 0
E 0 0 0 0 0

如何保留数据框的原始排序?

2 个答案:

答案 0 :(得分:3)

您可以这样做:

m <- acast(dd, V1 ~ V2, value.var="V3", fill = 0)
m[dd$V1,dd$V2]

给出了:

  Y X N M S
D 0 0 0 0 0
E 0 0 0 0 0
C 0 0 0 0 0
B 0 0 0 0 0
A 0 0 0 0 0

答案 1 :(得分:3)

V1V2纳入因子,当您这样做时,将其级别设为您想要的顺序。制作因子时的默认排序是对它们进行排序,这就是您第一次获得订单的原因。

d <- data.frame(V1=c("D", "E", "C", "B", "A"), V2=c("Y","X","N","M","S"), V3=0)
d$V1 <- factor(d$V1, levels=unique(d$V1))
d$V2 <- factor(d$V2, levels=unique(d$V2))
> acast(d, V1~V2, value.var="V3", fun.aggregate=sum)
  Y X N M S
D 0 0 0 0 0
E 0 0 0 0 0
C 0 0 0 0 0
B 0 0 0 0 0
A 0 0 0 0 0