我有一个带有几个变量的数据框来反转代码。我有一个单独的向量,它有所有的变量来反转代码。我想使用mutate_at()或其他一些整洁的方法,在一行代码中对它们进行反向编码。下面是要反转的数据集和项的向量
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项反向编码:
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%运算符有问题。
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
任何帮助都将不胜感激!
发布于 2019-12-19 20:39:07
您可以将reverse
直接提供给mutate_at
,而不需要vars(. %in% reverse)
。我会将反转简化为6减去当前值。
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)), ...)
https://stackoverflow.com/questions/59416554
复制相似问题