Создание нескольких новых переменных на основе существующих и одновременное их перекодирование R

#r #variables #recode

Вопрос:

Если бы я хотел создать новые переменные из ранее существовавшего диапазона и изменить их значения, не делая их все по отдельности, каков был бы наилучший подход?

Например, здесь я создаю 1С на основе 1, но перекодирую 2 в нули и т. Д. Однако, как бы я создал 100 новых var одновременно (называя их 1C, 2C, 3C и т.д.) На основе той же логики?

 df
 #r #variables #recode



Вопрос:

Если бы я хотел создать новые переменные из ранее существовавшего диапазона и изменить их значения, не делая их все по отдельности, каков был бы наилучший подход? Например, здесь я создаю 1С на основе 1, но перекодирую 2 в нули и т. Д. Однако, как бы я создал 100 новых var одновременно (называя их 1C, 2C, 3C и т.д.) На основе той же логики? 1C`[df #r #variables #recode

Вопрос:

Если бы я хотел создать новые переменные из ранее существовавшего диапазона и изменить их значения, не делая их все по отдельности, каков был бы наилучший подход? Например, здесь я создаю 1С на основе 1, но перекодирую 2 в нули и т. Д. Однако, как бы я создал 100 новых var одновременно (называя их 1C, 2C, 3C и т.д.) На основе той же логики? 1`==1]<-1 df #r #variables #recode

Вопрос:

Если бы я хотел создать новые переменные из ранее существовавшего диапазона и изменить их значения, не делая их все по отдельности, каков был бы наилучший подход? Например, здесь я создаю 1С на основе 1, но перекодирую 2 в нули и т. Д. Однако, как бы я создал 100 новых var одновременно (называя их 1C, 2C, 3C и т.д.) На основе той же логики? 1C`[df #r #variables #recode

Вопрос:

Если бы я хотел создать новые переменные из ранее существовавшего диапазона и изменить их значения, не делая их все по отдельности, каков был бы наилучший подход? Например, здесь я создаю 1С на основе 1, но перекодирую 2 в нули и т. Д. Однако, как бы я создал 100 новых var одновременно (называя их 1C, 2C, 3C и т.д.) На основе той же логики? 1`==2]<-0 df #r #variables #recode

Вопрос:

Если бы я хотел создать новые переменные из ранее существовавшего диапазона и изменить их значения, не делая их все по отдельности, каков был бы наилучший подход? Например, здесь я создаю 1С на основе 1, но перекодирую 2 в нули и т. Д. Однако, как бы я создал 100 новых var одновременно (называя их 1C, 2C, 3C и т.д.) На основе той же логики? 1C`[df #r #variables #recode

Вопрос:

Если бы я хотел создать новые переменные из ранее существовавшего диапазона и изменить их значения, не делая их все по отдельности, каков был бы наилучший подход? Например, здесь я создаю 1С на основе 1, но перекодирую 2 в нули и т. Д. Однако, как бы я создал 100 новых var одновременно (называя их 1C, 2C, 3C и т.д.) На основе той же логики? 1`==0]<-0

Ответ №1:

Мы можем использовать dplyr::across и dplyr::recode :

Представьте, что у нас были следующие данные:

 set.seed(123)
df <- setNames(data.frame(1:5,matrix(sample(0:2,25,replace = TRUE),nrow = 5)),c("ID",1:5))
df
  ID 1 2 3 4 5
1  1 2 0 0 0 2
2  2 0 2 0 1 0
3  3 0 2 1 0 1
4  4 2 1 2 0 0
5  5 1 0 0 2 0
 

Мы можем использовать Tidyselect с : , чтобы указать столбцы. dplyr::recode принимает ... аргумент, в котором перечислены <have> = <want> наборы вещей для перекодирования. Мы можем использовать .names = аргумент, чтобы указать, как мы хотим, чтобы отображались имена новых столбцов.

 library(dplyr)
df %>%
   mutate(across(`1`:`5`, ~recode(.,`0` = 0, `1` = 1, `2` = 0),
                 .names = "{.col}C"))
  ID 1 2 3 4 5 1C 2C 3C 4C 5C
1  1 2 1 1 0 0  0  1  1  0  0
2  2 2 1 1 2 0  0  1  1  0  0
3  3 2 1 0 2 2  0  1  0  0  0
4  4 1 2 1 0 1  1  0  1  0  1
5  5 2 0 2 0 2  0  0  0  0  0
 

Комментарии:

1. Создаются новые переменные во фрейме data.frame. Вам просто нужно назначить результат. Вы можете добавить -> result , например, в конец или result <- в начало.

2. Хорошо, я изменил первую часть на df<-df%>%, и это, похоже, тоже сработало. Еще раз спасибо вам!