[问题] 表格转换生成新标签与区间对照

楼主: YangPeiHung (杨培宏)   2017-04-12 11:09:24
[问题类型]:
程式咨询(我想用R 做某件事情,但是我不知道要怎么用R 写出来)
[软件熟悉度]:
入门(写过其他程式,只是对语法不熟悉)
[问题叙述]:
目前有4个学生与不同科目的试题共10份,由电脑随机控制他们可以作答的时间间隔,
想要观察的是他们在同时作答的时候的考试表现,资料格式如下
Examtable
StudentID examID start(sec) end(sec) average(score/sec)
001 1 A D 0.05
001 1 G K 0.63
...以此类推
因为要转换成一个自创的标签为:(examID)-(start)-(end)
要观察他们的同时作答秒数区间,就要把每个人在同一份试卷的作答秒数区间取交集
例如:红色为有作答的秒数
start|ABCD|EF|GHIJK|LMNO|PQRS|TUVW|XYZ12345|end 学生1
start|ABCDE|FGH|IJKLMN|OPQ|RSTUVWXYZ|12|345|end 学生2
start|ABCD|EFGH|IJK|LMNOPQ|RS|TUVW|XYZ|12|345|end 取交集
新的标签就是1-A-D 1-I-K 1-R-S 1-X-Z 1-3-5 ,以此类推,
并且做出一个新的table
rownames就是新标签,colnames是studentID 中间要填入的就是average(score/sec)
(这里假设在作答秒数内分数分配为uniform,
并且每份试卷的最开始与最后结束考试时间等长)
StudentID_1 StudentID_2 ......
1-(A)-(D) 0.05 score/sec ......
1-(I)-(K) 0.63 score/sec ......
....以此类推
[程式范例]:
取intersect的程式码运行上没有问题
但是不知道如何回测并且生成新标签与填入平均分数
for (i in 1:10){
ExamTemp<- Examtable[,c(1:4)]
ExamTemp1<-subset(ExamTemp, ExamTemp$examID =="i")[,-2]
intersect<-function(start, end, id, overlap=length(unique(id))) {
dd<-rbind(data.frame(pos=start, event=1), data.frame(pos=end, event=-1))
dd<-aggregate(event~pos, dd, sum)
dd<-dd[order(dd$pos),]
dd$open <- cumsum(dd$event)
r<-rle(dd$open>=overlap)
ex<-cumsum(r$lengths-1 + rep(1, length(r$lengths)))
sx<-ex-r$lengths+1
cbind(dd$pos[sx[r$values]],dd$pos[ex[r$values]+1])
}
with(ExamTemp1, intersect(Start,End,StudentID,length(unique(StudentID)))) ->df
如何利用df这个intersect的矩阵回测原本的资料并且填入新标签与平均
}
[环境叙述]:
R-3.3.2

Links booklink

Contact Us: admin [ a t ] ucptt.com