首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从mutate_at到mutate(交叉(,也称为.names

从mutate_at到mutate(交叉(,也称为.names
EN

Stack Overflow用户
提问于 2021-07-17 02:10:46
回答 2查看 33关注 0票数 0

我正在重新编码对一组问题(不是连续列中的问题)的调查响应(字符),并且我很高兴能让以下代码工作:

代码语言:javascript
复制
#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 -但它不起作用:

代码语言:javascript
复制
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部件工作?

EN

回答 2

Stack Overflow用户

发布于 2021-07-17 11:38:35

对于across,当您有fcols as编号时,您不需要vars -

代码语言:javascript
复制
library(dplyr)

d %>% mutate(across(fcols,
                    ~recode(.,
                             "OriginalResponse1" = "NewResponse1",
                             "OriginalResponse2" = "NewResponse2",
                             "OriginalResponse3" = "NewResponse3",
                             "OriginalResponse4" = "NewResponse4",
                             .default = NA_character_)))

当您希望保持原始列不变并创建新列时,.names非常有用。

代码语言:javascript
复制
d %>% mutate(across(fcols,
                    ~recode(.,
                             "OriginalResponse1" = "NewResponse1",
                             "OriginalResponse2" = "NewResponse2",
                             "OriginalResponse3" = "NewResponse3",
                             "OriginalResponse4" = "NewResponse4",
                             .default = NA_character_), .names = '{col}_new'))
票数 0
EN

Stack Overflow用户

发布于 2021-07-18 02:44:19

我们可以用all_of代替vars。此外,recode可以接受一个命名的vector

代码语言:javascript
复制
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_)))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68413547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档