以下是我的数据摘录:
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.1
,y.1
,x.2
,y.2
,x.3
, y.3
),我希望订单与重新形成前列出现的原始顺序相同(即全部x
,然后全部y
; x.1
,{{ 1}},x.2
,x.3
,y.1
,y.2
)。
我可以手动完成,但我有100多列重塑。我试过了y.3
,却找不到任何东西。
谢谢!
答案 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}}