以下は動作しませんか?
dcast(d, id ~ time)
# Using var as value column: use value.var to override.
# id 1 2 3
# 1 1 0.2869739 0.59591690 0.8989719
# 2 2 0.4533770 0.14741778 NA
# 3 3 0.1286770 0.02465634 0.7363114
## OR, to get rid of the message:
## dcast(d, id ~ time, value.var = "var")
ただし、少し異なる質問をしていると思います(私のコメントで述べたように)。特に、次のものから始めたとしたらどうでしょう。
set.seed(1)
d <- data.frame(id = c(1,1,1,2,2,3,3,3),
time = c(1,2,3,1,2,1,2,3),
var1 = runif(8),
var2 = runif(8))
ベース Rreshape
を使用すると、次の 1 行だけになります。
reshape(d, direction = "wide", idvar = "id", timevar = "time")
# id var1.1 var2.1 var1.2 var2.2 var1.3 var2.3
# 1 1 0.2655087 0.6291140 0.3721239 0.06178627 0.5728534 0.2059746
# 4 2 0.9082078 0.1765568 0.2016819 0.68702285 NA NA
# 6 3 0.8983897 0.3841037 0.9446753 0.76984142 0.6607978 0.4976992
dcast
「reshape2」から同じことをやってみましょう。私たちが取りたくなるかもしれないアプローチは次のとおりです。
library(reshape2)
dcast(d, id ~ time)
# Using var2 as value column: use value.var to override.
# id 1 2 3
# 1 1 0.6291140 0.06178627 0.2059746
# 2 2 0.1765568 0.68702285 NA
# 3 3 0.3841037 0.76984142 0.4976992
しかしdcast
、単一のvalue.var
. melt
そのため、データを再度取得する必要があります。
d2 <- melt(d, id.vars = c("id", "time"))
head(d2)
# id time variable value
# 1 1 1 var1 0.2655087
# 2 1 2 var1 0.3721239
# 3 1 3 var1 0.5728534
# 4 2 1 var1 0.9082078
# 5 2 2 var1 0.2016819
# 6 3 1 var1 0.8983897
dcast
これで、非常に簡単に使用できます。
dcast(d2, id ~ variable + time)
# id var1_1 var1_2 var1_3 var2_1 var2_2 var2_3
# 1 1 0.2655087 0.3721239 0.5728534 0.6291140 0.06178627 0.2059746
# 2 2 0.9082078 0.2016819 NA 0.1765568 0.68702285 NA
# 3 3 0.8983897 0.9446753 0.6607978 0.3841037 0.76984142 0.4976992