【发布时间】:2021-02-17 09:35:21
【问题描述】:
我是一名自学成才的程序员,在 MATLAB 方面有几年的经验。我是 R 的新手,这是我在 Stack Overflow 上的第一个问题。
我正在尝试使用来自 dplyr 的 recode 重新编码数据框中的多个变量。在下面的代码中,我提供了一个 data 的 sn-p 和我想与 recode 一起使用的选项列表 opt_dass。我想将每个变量中以“dass”开头的字符串值转换为数字 - 从不 = 0,有时 = 1,等等。
我知道有多种方法可以解决这个问题,包括ifelse、lapply 和case_when。在下面的示例中,我想知道为什么会收到有关非语言对象的错误。我正在使用paste0 创建要在data 中引用的变量名。我已经阅读了大量有关如何在 R 中的 for 循环中引用列名的信息,但我仍然没有找到答案。
library(tidyverse)
data <- structure(list(id = c("1", "2", "3", "4", "5", "6", "7", "8",
"9", "11"), dass1_t1 = c("Sometimes", "Often", "Often", "Almost Always",
"Sometimes", "Sometimes", "Sometimes", "Sometimes", "Sometimes",
"Sometimes"), dass2_t1 = c("Sometimes", "Never", "Often", "Sometimes",
"Sometimes", "Never", "Sometimes", "Sometimes", "Often", "Sometimes"
), dass3_t1 = c("Often", "Sometimes", "Never", "Never", "Never",
"Sometimes", "Never", "Never", "Sometimes", "Sometimes"), dass4_t1 = c("Never",
"Never", "Never", "Never", "Never", "Sometimes", "Never", "Never",
"Never", "Sometimes"), dass5_t1 = c("Almost Always", "Sometimes",
"Never", "Sometimes", "Never", "Sometimes", "Sometimes", "Never",
"Almost Always", "Often")), row.names = c(NA, -10L), class = "data.frame")
opt_dass <- list("Never"=0,"Sometimes"=1,"Often"=2,"Almost Always"=3) # list - chr to num
# my attempt at a for loop to recode
for (i in 1:5) {
attach(data)
paste0("dass_", i, "_t1") <- recode(paste0("dass_", i, "_t1"), !!!opt_dass, .default=NA_real_)
}
#> Error in paste0("dass_", i, "_t1") <- recode(paste0("dass_", i, "_t1"), : target of assignment expands to non-language object
由reprex package (v0.3.0) 于 2020 年 11 月 4 日创建
额外问题:有没有办法编写一个for 循环,可以完成对具有不同选项集的多组变量进行重新编码?我有一个包含多个自我报告度量的数据集,其中不同的字符串响应具有不同的数值。我认为这将涉及一些元编程,并且很想听听您的想法!
【问题讨论】: