私は、研究対象とそのフォローアップ訪問のタイミングに関するレポートを生成するためのコードを書いています。次のようなデータがあります。
subj_id timepoint date
100 3 month 2013-01-01
101 3 month 2013-01-12
102 3 month 2013-02-01
... ... ...
これを「幅の広い」データ フレームに変換し、別のデータ フレームにマージして、被写体がいつ見られるべきかを示したいと思います。を使用reshape
してこれを行うことができますが、次の問題に遭遇します。データ フレームを再形成すると、変数で実際の変数が見つかった数の列しか取得timepoint
できません。データベース。
したがって、私の例では、変数timepoint
は 4 つのレベル (3 か月、6 か月、9 か月、12 か月) を持つ因子です。ただし、調査のこの時点では、3 か月の訪問を過ぎた人は誰もいなかったので、データは上記の 100、101、および 102 行だけです。
次のコマンドを使用して、私が見ているものを取得できます (明らかに、これは私のデータが作成される方法ではありません)。
test_df <- data.frame(subj_id=c(100,101,102),
timepoint=c("3 month","3 month","3 month"),
date=c(as.Date("2013-01-01"),
as.Date("2013-01-12"),
as.Date("2013-02-01")))
test_df$timepoint <- factor(x=test_df$timepoint,
levels=c("3 month","6 month",
"9 month","12 month"),
labels=c("3 month","6 month",
"9 month","12 month"),
ordered=TRUE)
print(test_df)
> subj_id timepoint date
> 1 100 3 month 2013-01-01
> 2 101 3 month 2013-01-12
> 3 102 3 month 2013-02-01
levels(test_df$timepoint)
> [1] "3 month" "6 month" "9 month" "12 month"
reshape(data=test_df,v.names="date",
timevar="timepoint",idvar="subj_id",direction="wide")
> subj_id date.3 month
> 1 100 2013-01-01
> 2 101 2013-01-12
> 3 102 2013-02-01
私が取得したいのは、次のようなものです。
> subj_id date.3 month date.6 month date.9 month date.12 month
> 1 100 2013-01-01 NA NA NA
> 2 101 2013-01-12 NA NA NA
> 3 102 2013-02-01 NA NA NA
base でこれを行う方法はありreshape
ますか? 私の現在の考えは、実行する前に4つの「偽の」レコードを入れて、reshape
4つのレベルを見てそれに応じてデータフレームを作成することですが、それはせいぜい不器用に思えます。より良い方法はありますか?