R:从长到宽的重新整形,重新整理的列的顺序作为原始列顺序

时间:2016-05-02 00:15:57

标签: r dataframe reshape

以下是我的数据摘录:

data <- as.data.frame(matrix(c(rep(1,3),rep(2,3),rep(1:3,2),rep(0:2,4)),6,4))
colnames(data) <- c("id", "rater", "x", "y")
print(data)

#   id rater x y
# 1  1     1 0 0
# 2  1     2 1 1
# 3  1     3 2 2
# 4  2     1 0 0
# 5  2     2 1 1
# 6  2     3 2 2

我把它从长到宽重塑:

reshape(data, timevar = "rater", idvar = "id", direction = "wide")

# Result:
#   id x.1 y.1 x.2 y.2 x.3 y.3
# 1  1   0   0   1   1   2   2
# 4  2   0   0   1   1   2   2

但不是默认顺序(按timevar排序,即x.1y.1x.2y.2x.3y.3),我希望订单与重新形成前列出现的原始顺序相同(即全部x,然后全部y; x.1,{{ 1}},x.2x.3y.1y.2)。

我可以手动完成,但我有100多列重塑。我试过了y.3,却找不到任何东西。

谢谢!

1 个答案:

答案 0 :(得分:1)

这可以通过使用dcast中的data.table来实现,value.var可能需要多个library(data.table) dcast(setDT(data), id~rater, value.var=c("x", "y"), sep=".") # id x.1 x.2 x.3 y.1 y.2 y.3 #1: 1 0 1 2 0 1 2 #2: 2 0 1 2 0 1 2

{{1}}