我有一个看起来像这样的数据框:
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 将具有三个条目。预期输出如下所示:
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 和各种形式的 merge.stack ,从某种意义上说,我得到了一个正确的输出,但我无法很好地理解输入以一直到达那里:
library(splitstackshape)
merged.stack(x, id.vars='id', var.stubs=c("rd_test","mt_test"), sep="_")
我在重塑方面取得了更大的成功(越来越接近):
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)