当我在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
如何保留数据框的原始排序?
答案 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)
将V1
和V2
纳入因子,当您这样做时,将其级别设为您想要的顺序。制作因子时的默认排序是对它们进行排序,这就是您第一次获得订单的原因。
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