Я заметил неожиданное поведение mutate_at
. Предположим, у меня есть фрейм данных и список столбцов, которые я хочу изменить, например:
df1 <- data_frame(var1 = c(1,2,3,4,5,6),
var2 = c(1,1,1,2,2,2),
var3 = c(10,30,50,70,90,110))
variables <- c("var1", "var2")
Теперь я применяю mutate_at
для создания новых факторных версий столбцов, определенных в variables
. Указывая «cat» в list
, я проверяю, сохраняются ли старые версии, а новые версии имеют имя старой версии плюс «_cat»:
df1 %>% mutate_at(vars(variables), .funs = list(cat = as.factor))
# A tibble: 6 x 5
var1 var2 var3 var1_cat var2_cat
<dbl> <dbl> <dbl> <fct> <fct>
1 1 1 10 1 1
2 2 1 30 2 1
3 3 1 50 3 1
4 4 2 70 4 2
5 5 2 90 5 2
6 6 2 110 6 2
Однако, если я применяю mutate_at
только к одному столбцу (в моем случае мой variables
вектор имеет только один элемент), имя новой переменной - только "cat":
variables <- c("var1")
df1 %>% mutate_at(vars(variables), .funs = list(cat = as.factor))
# A tibble: 6 x 4
var1 var2 var3 cat
<dbl> <dbl> <dbl> <fct>
1 1 1 10 1
2 2 1 30 2
3 3 1 50 3
4 4 2 70 4
5 5 2 90 5
6 6 2 110 6
На каком-то уровне я понимаю почему mutate_at
делает это: если вы хотите назвать один столбец с каким-либо измененным именем каким-либо особым образом, просто используйте mutate
как mutate(var1_cat = as.factor(var1))
.
Однако в моем случае я хочу запустить mutate_at
работа над несколькими кадрами данных, для каждого из которых у меня есть вектор столбцов для изменения. Важно отметить, что эти векторы могут иметь только один элемент. Итак, не лучше ли для mutate_at
показать одинаковое поведение именования независимо от того, сколько vars
он получает?