gpt4 book ai didi

r - 如何在R中编写一个重新编码多个变量的for循环?

转载 作者:行者123 更新时间:2023-12-04 13:31:43 24 4
gpt4 key购买 nike

我是一名自学成才的程序员,在 MATLAB 中有几年的经验。我是 R 的新手,这是我关于 Stack Overflow 的第一个问题。
我正在尝试使用 recode 重新编码数据帧中的多个变量来自 dplyr。在下面的代码中,我提供了一个片段 data和选项列表,opt_dass , 我想和 recode 一起使用.我想将以“dass”开头的每个变量中的字符串值转换为数字 - 从不= 0,有时= 1,依此类推。
我知道有多种方法可以解决此问题,包括 ifelse , lapply , 和 case_when .在下面的示例中,我想知道为什么会收到有关非语言对象的错误。我正在使用 paste0创建变量名以在 data 中引用.我已经阅读了很多关于如何在 for 中引用列名的文章。在 R 中循环,我仍然没有找到答案。

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
创建于 2020-11-04 由 reprex package (v0.3.0)
奖金问题:有没有办法写一个 for可以为具有不同选项集的多组变量完成重新编码的循环?我有一个包含多个自我报告度量的数据集,其中不同的字符串响应具有不同的数值。我认为这将涉及一些元编程,并且很想听听您的想法!

最佳答案

首先,使用命名向量而不是命名列表

opt_dass <- c("Never"=0,"Sometimes"=1,"Often"=2,"Almost Always"=3)
那么就
mutate(data, across(starts_with("dass"), ~unname(opt_dass[.])))
输出
   id dass1_t1 dass2_t1 dass3_t1 dass4_t1 dass5_t1
1 1 1 1 2 0 3
2 2 2 0 1 0 1
3 3 2 2 0 0 0
4 4 3 1 0 0 1
5 5 1 1 0 0 0
6 6 1 0 1 1 1
7 7 1 1 0 0 1
8 8 1 1 0 0 0
9 9 1 2 1 0 3
10 11 1 1 1 1 2

关于r - 如何在R中编写一个重新编码多个变量的for循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64684336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com