#r #variables #dplyr #character #rename
#r #переменные #dplyr #символ #переименовать
Вопрос:
В R я пытаюсь взять первое значение символьной переменной и использовать его для переименования той же переменной или даже для присвоения имени другой новой переменной, но я не понял, как это сделать.
Пример:
PR <- data.frame("Variable1" = c("Red", "Blue", "Green", "Yellow"),
"Variable2" = seq(1:4))
PR
Variable1 Variable2
1 Red 1
2 Blue 2
3 Green 3
4 Yellow 4
Я знаю, что можно было бы просто использовать «PR %>% rename (Red = Variable1)», но я хочу, чтобы R брал это имя непосредственно из переменной. Результат должен быть:
Red Variable2
1 Red 1
2 Blue 2
3 Green 3
4 Yellow 4
Я пытался использовать функцию «rename ()» из dplyr, чтобы сделать это, но это не сработало:
PR <- PR %>% rename(as.name(Variable1)[1] = Variable1)
Error: unexpected '=' in "PR <- PR %>% rename(as.name(Variable1)[1] ="
Как я мог бы сделать это с помощью dplyr или даже в контексте создания новой переменной с помощью команды «mutate ()» (например, если я хочу создать новую переменную, имя которой является первым значением «Variable1»)?
Ответ №1:
Работает ли это:
> PR
Variable1 Variable2
1 Red 1
2 Blue 2
3 Green 3
4 Yellow 4
> name <- PR$Variable1[1]
> PR %>% rename(!!sym(name) := Variable1)
Red Variable2
1 Red 1
2 Blue 2
3 Green 3
4 Yellow 4
>
Комментарии:
1. Спасибо!! это сработало отлично! У меня просто последний вопрос: что означают части «!!» и «:=»?
2. Итак, dplyr использовал нечто, называемое нестандартной оценкой, то есть мы можем напрямую использовать имена столбцов, как если бы они были именами объектов, например: df %>% select(variable1), здесь variable1 — это имя столбца. Но в нашем примере он ищет первое значение переменной 1, то есть Red , которое rename не может найти, поэтому нам нужно преобразовать его в symbol . Просто посмотрите нестандартную оценку, вы получите лучшую идею.
Ответ №2:
Вам нужно использовать специальную замену.
library(tidyverse)
PR <- data.frame("Variable1" = c("Red", "Blue", "Green", "Yellow"),
"Variable2" = seq(1:4))
#Note the sequence of commands
PR %>%
mutate(Variable3 = PR$Variable1[1]) %>%
rename(!!PR$Variable1[1] := Variable1)
# Red Variable2 Variable3
# 1 Red 1 Red
# 2 Blue 2 Red
# 3 Green 3 Red
# 4 Yellow 4 Red
Ответ №3:
Мы можем использовать rename_at
library(dplyr)
PR %>%
rename_at(vars(Variable1), ~ PR$Variable1[1])
#. Red Variable2
#1 Red 1
#2 Blue 2
#3 Green 3
#4 Yellow 4