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

看板R_Language作者 (楊培宏)時間8年前 (2017/04/12 11:09), 8年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/3 (看更多)
[問題類型]: 程式諮詢(我想用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://www.ptt.cc/bbs/R_Language/M.1491966566.A.D1A.html ※ 編輯: YangPeiHung (202.169.173.134), 04/12/2017 11:10:15
文章代碼(AID): #1OxPfcqQ (R_Language)
文章代碼(AID): #1OxPfcqQ (R_Language)