初学者问题来了,对不起......我有一个结构如下的数据集:
dat.1<-data.frame(id=c(1,1,1,2,2,2),test=c("test.1","test.2","test.3"),result=c(1,2,1,2,2,1))
dat.1
id test result
1 1 test.1 1
2 1 test.2 2
3 1 test.3 1
4 2 test.1 2
5 2 test.2 2
6 2 test.3 1
实际数据集当前具有32个测试,并且1000&lt; ID号,结果总是二进制 - 测试数量可以增加,ID也是如此。我想重新安排数据,以便每个测试,即测试1&#39;有一个像这样的列:
dat.3<-data.frame(id=c(1,2),test.1=c(1,2),test.2=c(2,2),test.3=c(1,1))
dat.3
id test.1 test.2 test.3
1 1 1 2 1
2 2 2 2 1
这方面的一个小问题是并非每个ID都经历过每次测试,因此任何解决方案都必须应对NA。为了在dat.3中澄清,测试的列内容是dat.1的结果列。
目前我已经创造了一个空洞的&#39;数据框可以适应新的测试,如下所示:
dat.2<-data.frame(id=c(1,2),test.1=c(NA,NA),test.2=c(NA,NA),test.3=c(NA,NA))
dat.2
id test.1 test.2 test.3
1 1 NA NA NA
2 2 NA NA NA
我一直在试验ifelse和IF dat的逻辑。$ id == dat.2 $ id&amp; dat.1 $测试==&#34; test.1&#34;那么dat.2 col = test.1,输入dat.1 $得到dat.3 $ test.1 - 如果这有任何意义的话!可以预见的是,我没有运气,觉得我错过了一个非常明显的步骤/过于复杂的事情,所以任何帮助都会非常感激 - 谢谢
编辑:感谢您的评论 - 重塑已经开始有所帮助;但是,我想我试图用上面的例子过度简化。我在下面放了一个新的示例数据集:dat.4<-data.frame(id=c(1,1,1,1,1,1,2,2,2),result=c(1,1,1,2,2,2,3,3,3),
test=c("test.1","test.2","test.3"),result=c(1,2,1,2,2,2,2,2,1))
dat.1
id result test result.1
1 1 1 test.1 1
2 1 1 test.2 2
3 1 1 test.3 1
4 1 2 test.1 2
5 1 2 test.2 2
6 1 2 test.3 2
7 2 3 test.1 2
8 2 3 test.2 2
9 2 3 test.3 1
因此,每个ID(实际上是一个样本ID)都有一个测试,它已经为这个进一步的测试提供了资格 - 这个测试可以有一个或多个结果。因此,在上面的示例中,最终的数据结构如下所示:
dat.3<-data.frame(id=c(1,1,2),result=c(1,2,3),test.1=c(1,2,2),test.2=c(2,2,2),
test.3=c(1,2,1))
dat.3
id result test.1 test.2 test.3
1 1 1 1 2 1
2 1 2 2 2 2
3 2 3 2 2 1
所以我真正想要的是基于两个柱状况的重塑 - 这是否有意义?
答案 0 :(得分:1)
进一步了解 - 答案是在R手册中(不知道我错过了它) reshape manual
所以在上面的例子中,
dat.2<-reshape(dat.1,idvar=c("id","result"),timevar="test",direction="wide")
dat.2
id result result.1.test.1 result.1.test.2 result.1.test.3
1 1 1 1 2 1
4 1 2 2 2 2
7 2 3 2 2 1