我是一名教師,並且想要正確使用data.table
包中的R
來自動將學生答案記入日誌文件中,即如果學生回答某個特定問題時添加一個名爲correct
的列,是該問題的正確答案,否則爲0。我可以很容易地做到這一點,如果每個問題只有1個答案,但我正在逐漸絆倒了,如果一個問題有多種可能的答案(問題及其可能的正確答案存儲在另一個表)ifelse賦值data.table
下面是一個MWE:
set.seed(123)
question_table <- data.table(id=c(1,1,2,2,3,4),correct_ans=sample(1:4,6,replace = T))
log <- data.table(student=sample(letters[1:3],10,replace = T),
question_id=c(1,1,1,2,2,2,3,3,4,4),
student_answer= c(2,4,1,3,2,4,4,5,2,1))
我的問題在於什麼是正確data.table
使用ifelse
的方法j
,尤其是如果我們依賴於另一個表?
log[,correct:=ifelse(student_answer %in%
question_table[log$question_id %in% id]$correct_ans,1,0)]
從以下可以看出,問題1和2都有多個可能的正確答案。
> question_table
id correct_ans
1: 1 2
2: 1 4
3: 2 2
4: 2 4
5: 3 4
6: 4 1
雖然正確的列的計算沒有錯誤,但有些東西並不正確:例如,當student b
回答問題時,即使他回答不正確,他也會被授予正確的分數。 correct
列中只有一些條目已關閉,這導致我相信我沒有得到如何確定變量的範圍。
> log
student question_id student_answer correct
1: b 1 2 1
2: c 1 4 1
3: b 1 1 1 <- ?
4: b 2 3 0
5: c 2 2 1
6: b 2 4 1
7: c 3 4 1
8: b 3 5 0
9: a 4 2 1 <- ?
10: c 4 1 1
我認爲通過join
與荷蘭國際集團question_table
與製作在log
表中的正確答一個輔助列,但是,這並不工作,因爲關鍵不在於後者是獨一無二的。
任何和所有幫助,將不勝感激。 在此先感謝。
感謝您的及時回覆!你可以解釋語法嗎?我已經閱讀了[this](https://rstudio-pubs-static.s3.amazonaws.com/52230_5ae0d25125b544caab32f75f0360e775.html)多次在'data.table'的'join'中發佈,但仍然沒有看到你的答案,鏈接到鍵的想法,也不是'i','j','by',':='符號。或者至少讓我指出一些其他可以解釋推理的文檔? –
@Sameer好問題。關於連接的官方小插件還沒有出來,你可以在這裏跟其他新文檔一起追蹤它:https://github.com/Rdatatable/data。表/問題/ 944目前發佈的小插曲和常見問題在這裏:https://github.com/Rdatatable/data.table/wiki/Getting-started在此期間,我有一些筆記在這裏:http://stackoverflow.com /documentation/data.table/4976/joins-and-merges#t=201610291315481350706您鏈接的博客已過期,現在很少需要密鑰,正如Arun所解釋的:http://stackoverflow.com/a/20057411/ – Frank
小插曲沒有出來,但手冊涵蓋了很好,包括例子,請參閱[?data.table](http://jangorecki.gitlab.io/data.table/library/data.table/html/data.table.html) – jangorecki