如何在带有 R 的 for 循环中将 "paste" 命令与 "ifelse" 命令结合使用?

How can I combine the "paste" command with the "ifelse" command in a for loop with R?

R 中的 For 循环包括粘贴和 ifelse

亲爱的社区,

我正在尝试将 paste 命令与 ifelse 命令组合在 for 循环中与 R Studio - 但我收到错误消息 Error : “}”中的意外“}”.

下载简化数据集:

我创建了一个简单的数据集来说明我的问题。您可以通过以下link下载: https://www.dropbox.com/scl/fi/jxvcfvxnv7pf8e74tulzq/Data.xlsx?dl=0&rlkey=de7b3e2d0ge8ju6tsvz2bkzuv

背景:

我想评估测试中的经验数据。因此,我需要为每个项目 (i = 1-4) 创建一个新列(称为 Point.[i])。如果“Answer.[i]”列中的值对应于“Right.Answer.[i]”列中的值,我想为该任务打 1 分(否则为 0 分)。

我的代码

这对于一列来说很容易:

data1 <- mutate(data, Point.1 = ifelse(Answer.1 == Right.Answer.1, 1, 0)) 

现在我想为所有列编写一个 for 循环,但以下代码不起作用:


for (i in 1:4) {
  data[i] <- mutate(data, paste("Answer.",i) = ifelse(paste("Answer.",i) == paste("Answer.",i), 1, 0))
  print(data)
}

如果有任何建议,我将不胜感激。提前致谢!

卡拉

试试这个:

library(dplyr)
#Code
for (i in 1:3) {
  var <- sym(paste0("Answer.",i))
  var2 <- sym(paste0("Right.Answer.",i))
  data <- data %>%  mutate(!!var := ifelse(!!var == !!var2, 1, 0))
  print(data)
}

输出:

data
  Person Answer.1 Right.Answer.1 Answer.2 Right.Answer.2 Answer.3 Right.Answer.3
1      1        1              A        1              B        0              B
2      2        0              A        0              B        1              B
3      3        1              A        0              B        1              B