首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将mutate_at与% in运算符%in%一起使用

将mutate_at与% in运算符%in%一起使用
EN

Stack Overflow用户
提问于 2019-12-19 20:31:07
回答 1查看 184关注 0票数 1

我有一个带有几个变量的数据框来反转代码。我有一个单独的向量,它有所有的变量来反转代码。我想使用mutate_at()或其他一些整洁的方法,在一行代码中对它们进行反向编码。下面是要反转的数据集和项的向量

代码语言:javascript
运行
AI代码解释
复制
library(tidyverse)
mock_data <- tibble(id = 1:5,
       item_1 = c(1, 5, 3, 5, 5),
       item_2 = c(4, 4, 4, 1, 1),
       item_3 = c(5, 5, 5, 5, 1))

reverse <- c("item_2", "item_3")

这是我想要的样子,只有第2项和第3项反向编码:

代码语言:javascript
运行
AI代码解释
复制
library(tidyverse)

solution <- tibble(id = 1:5,
                   item_1 = c(1, 5, 3, 5, 5),
                   item_2 = c(2, 2, 2, 5, 5),
                   item_3 = c(1, 1, 1, 1, 5))

我已经在下面的代码中尝试过了。我知道重新编码是正确的,因为我已经将它用于其他数据集,但我知道%in%运算符有问题。

代码语言:javascript
运行
AI代码解释
复制
library(tidyverse)
mock_data %>%
  mutate_at(vars(. %in% reverse), ~(recode(., "1=5; 2=4; 3=3; 4=2; 5=1")))

Error: `. %in% reverse` must evaluate to column positions or names, not a logical vector

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-19 20:39:07

您可以将reverse直接提供给mutate_at,而不需要vars(. %in% reverse)。我会将反转简化为6减去当前值。

代码语言:javascript
运行
AI代码解释
复制
mock_data %>% mutate_at(reverse, ~6 - .)
# # A tibble: 5 x 4
#      id item_1 item_2 item_3
#   <int>  <dbl>  <dbl>  <dbl>
# 1     1      1      2      1
# 2     2      5      2      1
# 3     3      3      2      1
# 4     4      5      5      1
# 5     5      5      5      5

如果reverse可能包含不在mock_data中的列,并且您想跳过这些列,请使用mutate_at(vars(one_of(reverse)), ...)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59416554

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文