[問題] 表格轉換生成新標籤與區間對照

作者: 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