基于现有变量创建多个新变量并同时重新编码 R
Creating multiple new variables based on existing ones and recode them at the same time R
如果我想从预先存在的范围创建新的变量并更改它们的值,而不必单独执行它们,最好的方法是什么?
例如,这里我根据 1 创建 1C,但将 2 重新编码为零等。但是,我如何根据同样的逻辑?
df$`1C`[df$`1`==1]<-1
df$`1C`[df$`1`==2]<-0
df$`1C`[df$`1`==0]<-0
我们可以使用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 创建 1C,但将 2 重新编码为零等。但是,我如何根据同样的逻辑?
df$`1C`[df$`1`==1]<-1
df$`1C`[df$`1`==2]<-0
df$`1C`[df$`1`==0]<-0
我们可以使用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