2

当我acast在 R 中使用时,我的数据框的排序变得混乱。想象一下我的 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

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

4

2 回答 2

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
于 2013-09-20T12:55:55.297 回答
3

Make V1and V2into 因子,当你这样做时,使它们的水平成为你想要的顺序。生成因子时的默认顺序是对它们进行排序,这就是为什么您会得到第一次的顺序。

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
于 2013-09-20T13:08:26.573 回答