如何在带有 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
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