Возьмите первое значение в переменной в качестве имени переменной в R

#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