次のようなデータフレームがあります。
ID rd_test_2011 rd_score_2011 mt_test_2011 mt_score_2011 rd_test_2012 rd_score_2012 mt_test_2012 mt_score_2012
1 A 80 XX 100 NA NA BB 45
2 XX 90 NA NA AA 80 XX 80
yy_test_20xx 列に NA がない ID について、列タイトルから取得した件名、テスト名、テスト スコア、および列タイトルから取得した年を含む新しいデータ フレームを作成するスクリプトを作成したいと考えています。 . したがって、この例では、ID 1 には 3 つのエントリがあります。予想される出力は次のようになります。
ID Subject Test Score Year
1 rd A 80 2011
1 mt XX 100 2012
1 mt BB 45 2012
2 rd XX 90 2011
2 rd AA 80 2012
2 mt XX 80 2012
私は reshape とさまざまな形式の merged.stack の両方を試しました。これは、正しい道を進んでいる出力を取得するという意味で機能しますが、そこに到達するのに十分なほど入力を理解できません。
library(splitstackshape)
merged.stack(x, id.vars='id', var.stubs=c("rd_test","mt_test"), sep="_")
私は reshape でより多くの成功を収めました (近づきました):
y<- reshape(x, idvar="id", ids=1:nrow(x), times=grep("test", names(x), value=TRUE),
timevar="year", varying=list(grep("test", names(x), value=TRUE), grep("score",
names(x), value=TRUE)), direction="long", v.names=c("test", "score"),
new.row.names=NULL)