【发布时间】:2021-07-23 13:33:30
【问题描述】:
免责声明:我认为有一个更有效的解决方案(也许是一个带有列表的匿名函数或 *apply 函数?)因此我向您寻求帮助!
数据
假设我有一个 df,参与者对 3 个问题 As 和 3 个问题 Bs 的回答,例如
qa1, qa2, qa3, qb1, qb2, qb3
1, 3, 1, 2, 4, 4
1, 3, 2, 2, 1, 4
2, 3, 1, 2, 1, 4
1, 3, 2, 1, 1, 3
EDIT df 还包含具有其他不相关数据的其他列!
我有一个向量,其中每个 qa1-3 和 qb1-3 的正确答案与列按顺序排列。
correct_answer <- c(1,3,2,2,1,4)
(即对于 qa1,qa2,qa3,qb1,qb2,qb3)
所需的操作
我想为每个问题创建一个新列(例如 qa1_correct),根据将 df 中的每个响应与正确答案中的相应答案进行匹配,对参与者是正确回答 (1) 还是错误回答 (0) 进行编码。理想情况下,我会得到:
qa1, qa2, qa3, qb1, qb2, qb3, qa1_correct, qa2_correct, qa3_correct ...
1, 3, 1, 2, 4, 4, 1, 1, 0, ...
1, 3, 2, 2, 1, 4, 1, 1, 1, ...
2, 3, 1, 2, 1, 4, 0, 1, 0, ...
1, 3, 2, 1, 1, 3, 1, 1, 1, ...
尝试失败
这是我对问题 As only 的尝试(对于 Bs 会重复)但它不起作用(可能是错误的函数 paste0()?):
index <- c(1:3)
for (i in index) {
df <- df %>% mutate(paste0("qa",i,"_correct") =
case_when(paste0("qa"i) == correct_answer[i] ~ 1,
paste0("qa"i) != correct_answer[i] ~ 0))
}
非常感谢您的指导!
【问题讨论】:
-
没有
mutate()的解决方案可以选择吗?