1

次のデータテーブルがあります。

df = data.frame(id=c(1,1,1,1),timepoint=c("3 months","6 months","9 months","12 months"),
            date=c("date1","date2","date3","date4"),bool=c("Y","Y","N","Y"),
            name=c("abc","def","ghi","jkl"), stringsAsFactors=F)

そして、次のように id 変数として id を使用して、これを 1 つの行にキャストしたいと思います。

library(reshape2)
melt = melt(df, id=c("id","timepoint"))
df2 = dcast(melt, id~variable+timepoint)

ただし、これにより、希望する順序で列が表示されません。つまり、次のとおりです。

df1 = df2[,c(1,3,7,11,4,8,12,5,9,13,2,6,10)]

以下のコードを使用してみました。これは、融解したテーブルを並べ替えて、希望の順序でキャストされることを期待しています。

var.names = c("date", "bool","name")
times = c("3 months", "6 months", "9 months", "12 months")
melt = melt[order(melt$id, match(melt$timepoint, times), match(melt$variable, var.names)),]

しかし結果は同じで、どうにかして dcast の呼び出しで順序を指定する必要があるようですが、これを行う方法がわかりません。

どうもありがとうございました。明らかな何かを見逃していた場合はお詫び申し上げます。

4

1 に答える 1

2

それを行う1つの方法は、

ind <- order(as.numeric(gsub('\\D+', '', names(df2[,-1]))))
df3 <- df2[c(1, ind+1)]
于 2016-08-18T09:31:23.857 に答える