【问题标题】:How can I combine the "paste" command with the "ifelse" command in a for loop with R?如何将“粘贴”命令与“ifelse”命令在for循环中与R结合起来?
【发布时间】:2021-04-06 08:51:12
【问题描述】:

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

尊敬的社区,

我正在尝试将 paste 命令与 ifelse 命令组合到 R Studio 的 for 循环中 - 但我收到错误消息 Error: Unexpected '}' in "} "。

下载简化数据集:

我创建了一个简单的数据集来说明我的问题。您可以通过以下链接下载: 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)
}

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

卡拉

【问题讨论】:

    标签: r for-loop if-statement paste


    【解决方案1】:

    试试这个:

    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
    

    【讨论】:

    • 您好鸭子,非常感谢您快速而乐于助人的回复。您的解决方案效果很好!这是我关于堆栈溢出的第一篇文章,我印象非常深刻。新年快乐!
    • @Karla 总是乐于助人!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    • 2014-08-25
    • 2021-09-18
    • 1970-01-01
    • 2019-08-16
    • 2010-11-18
    相关资源
    最近更新 更多