问题描述
对于我的论文研究,我试图同时重估多个变量/列。我曾尝试使用以下函数,但这需要我分开指定每一列:
full_df$CR39
我有大约 65 个要重新编码的变量(名为 CR00、CR01、CR02...)。值“1”必须变为“0”,值“2”必须变为“1”。我还有一些名为 CR00FAM、CR01FAM、CR02FAM、...) 的变量,我不希望同时对其进行重估。
我尝试过使用“select”函数,但这似乎没有帮助:full_df%>% select(starts_with("DF"),-contains("FAM")).
有人知道可能的解决方案吗?我搜索了很多 stackoverflow 主题,但没有一个建议的解决方案适合我。
解决方法
我们可以遍历变量并执行此操作。根据正则表达式选择感兴趣的列,即这些列名称以 (^
) 'CR' 开头,后跟一个或多个数字 (\\d+
) 的末尾 ($
)字符串。使用 lapply
循环选择列并应用 revalue
,将输出分配回所选列数据集
nm1 <- grep("^CR\\d+$",names(full_df),value = TRUE)
full_df[nm1] <- lapply(full_df[nm1],function(x) revalue(x,c("1"="0","2" ="1"))
或者使用 dplyr
library(dplyr)
full_df <- full_df %>%
mutate(across(matches("^CR\\d+$"),~
revalue(.,c("1" = "0","2" = "1"))))