我有两个数据集:第一个数据集包含参与者对问题的数字答案:
data <- data.frame(Q1 = 1:5,
Q2 = rev(1:5),
Q3 = c(4, 5, 1, 2, 3))
第二个数据集用作存储解决方案的参考表:
ref.table <- data.frame(Question = c("Q1", "Q2", "Q3"),
Solution = c("big", "big", "small"))
我想比较这两个数据集,并创建一个新的数据集,其中包含关于答案是正确(1)还是不正确(0)的二进制信息。为此,答案1, 2, 3
对应于"small"
,答案4, 5
对应于"big"
。
我的尝试如下:
accuracy <- data.frame(lapply(data, function(x) {ifelse(x >= 4 & ref.table$Solution[ref.table$Question == colnames(data)[x]] == "big", 1, 0)}))
但不知何故,这只给了我不正确的答案为0,而正确的答案是NA。
有人知道怎么解决这个问题吗?谢谢!
1条答案
按热度按时间pw9qyyiw1#
使用
tidyverse
,循环across
列,match
列名(cur_column()
),其中'Question'列来自'ref. table',获取相应的'Solution'值,检查它是否为'big'沿着列>=
的值4并将逻辑强制为二进制或者在
base R
中,循环lapply
中的列名,用[[
提取列,match
应用的逻辑与上面相同