我是一名教师,并且想要正确使用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