我正在重新编码对一组问题(不是连续列中的问题)的调查响应(字符),并且我很高兴能让以下代码工作:
#make a list of the selected columns
fcols <- c(2, 6, 8, 9, 14)
#recode the selected columns
d <- d %>% mutate_at(vars(fcols),
~(recode(.,
"OriginalResponse1" = "NewResponse1",
"OriginalResponse2" = "NewResponse2",
"OriginalResponse3" = "NewResponse3",
"OriginalResponse4" = "NewResponse4",
.default = NA_character_)))我的主要问题是与"across“一起工作,因为"mutate_at”显然已经被取代了。
我尝试了下面的方法-放在"across“中,并确保在末尾添加一个新的封闭paren -但它不起作用:
d <- d %>% mutate(across(vars(fcols),
~(recode(.,
"OriginalResponse1" = "NewResponse1",
"OriginalResponse2" = "NewResponse2",
"OriginalResponse3" = "NewResponse3",
"OriginalResponse4" = "NewResponse4",
.default = NA_character_))))
Error: Problem with `mutate()` input `..1`.
x Must subset columns with a valid subscript vector.
x Subscript has the wrong type `quosures`.
i It must be numeric or character.
i Input `..1` is `across(...)`.此外,我一直在尝试在.default参数之后使用.names参数创建一组新的列(而不仅仅是更改现有的列),但我一直无法使其工作,只有一次是部分的-当列出现但它们都是空的。
主要问题:在将其转换为工作的"mutate_at“版本时,我遗漏了什么?
额外的好处:如何让.names部件工作?
发布于 2021-07-17 11:38:35
对于across,当您有fcols as编号时,您不需要vars -
library(dplyr)
d %>% mutate(across(fcols,
~recode(.,
"OriginalResponse1" = "NewResponse1",
"OriginalResponse2" = "NewResponse2",
"OriginalResponse3" = "NewResponse3",
"OriginalResponse4" = "NewResponse4",
.default = NA_character_)))当您希望保持原始列不变并创建新列时,.names非常有用。
d %>% mutate(across(fcols,
~recode(.,
"OriginalResponse1" = "NewResponse1",
"OriginalResponse2" = "NewResponse2",
"OriginalResponse3" = "NewResponse3",
"OriginalResponse4" = "NewResponse4",
.default = NA_character_), .names = '{col}_new'))发布于 2021-07-18 02:44:19
我们可以用all_of代替vars。此外,recode可以接受一个命名的vector
library(dplyr)
library(stringr)
nm1 <- setNames(str_c("NewResponse", 1:4),
str_c("OriginalResponse", 1:4))
d %>%
mutate(across(all_of(fcols),
~recode(., !!! nm1,
.default = NA_character_)))https://stackoverflow.com/questions/68413547
复制相似问题