作者YangPeiHung (杨培宏)
看板R_Language
标题[问题] 表格转换生成新标签与区间对照
时间Wed Apr 12 11:09:24 2017
[问题类型]:
程式谘询(我想用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
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 202.169.173.134
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1491966566.A.D1A.html
※ 编辑: YangPeiHung (202.169.173.134), 04/12/2017 11:10:15