使用 dplyr 在数据帧的选择列中重新编码值
Recoding values in a selection of columns of a dataframe using dplyr
我有一个大型数据集,就像下一个示例中的数据集一样。 headers 中带有 A 的列的代码从 1 到 4,B 的列的代码从 1 到 3。
library(dplyr)
d <- data.frame(
ID = 1:10,
A = sample(x = 1:4, size = 10, replace = T),
AA = sample(x = 1:4, size = 10, replace = T),
B = sample(x = 1:3, size = 10, replace = T),
BB = sample(x = 1:3, size = 10, replace = T)
)
有没有一种巧妙的方法可以在 dplyr 中使用管道将 headers 中带有 A 的列和带有 Bs 的列中的值重新编码为以下字符串?
- As - 从 1、2、3、4 分别变为绿色、黄色、橙色、红色
- Bs - 从 1、2、3 分别变为绿色、黄色、红色
这是真实数据集的简化和友好版本。
通过使用dplyr中的mutate_at,可以完成从数字代码到字符串的重新编码。必须先将我们要重新编码的列从数字强制转换为字符,否则会出现错误消息。
library(dplyr)
d <- data.frame(
ID = 1:10,
A = sample(x = 1:4, size = 10, replace = T),
AA = sample(x = 1:4, size = 10, replace = T),
B = sample(x = 1:3, size = 10, replace = T),
BB = sample(x = 1:3, size = 10, replace = T))
d_recoded <- d %>% mutate_at(vars(-contains("ID")), funs(as.character)) %>%
mutate_at(vars(contains("A"), -contains("ID")), funs(case_when(. == 1 ~ "Green", . == 2 ~ "Yellow", . == 3 ~ "Orange", . == 4 ~ "Red"))) %>%
mutate_at(vars(contains("B"), -contains("ID")), funs(case_when(. == 1 ~ "Green", . == 2 ~ "Yellow", . == 3 ~ "Red")))
我有一个大型数据集,就像下一个示例中的数据集一样。 headers 中带有 A 的列的代码从 1 到 4,B 的列的代码从 1 到 3。
library(dplyr)
d <- data.frame(
ID = 1:10,
A = sample(x = 1:4, size = 10, replace = T),
AA = sample(x = 1:4, size = 10, replace = T),
B = sample(x = 1:3, size = 10, replace = T),
BB = sample(x = 1:3, size = 10, replace = T)
)
有没有一种巧妙的方法可以在 dplyr 中使用管道将 headers 中带有 A 的列和带有 Bs 的列中的值重新编码为以下字符串?
- As - 从 1、2、3、4 分别变为绿色、黄色、橙色、红色
- Bs - 从 1、2、3 分别变为绿色、黄色、红色
这是真实数据集的简化和友好版本。
通过使用dplyr中的mutate_at,可以完成从数字代码到字符串的重新编码。必须先将我们要重新编码的列从数字强制转换为字符,否则会出现错误消息。
library(dplyr)
d <- data.frame(
ID = 1:10,
A = sample(x = 1:4, size = 10, replace = T),
AA = sample(x = 1:4, size = 10, replace = T),
B = sample(x = 1:3, size = 10, replace = T),
BB = sample(x = 1:3, size = 10, replace = T))
d_recoded <- d %>% mutate_at(vars(-contains("ID")), funs(as.character)) %>%
mutate_at(vars(contains("A"), -contains("ID")), funs(case_when(. == 1 ~ "Green", . == 2 ~ "Yellow", . == 3 ~ "Orange", . == 4 ~ "Red"))) %>%
mutate_at(vars(contains("B"), -contains("ID")), funs(case_when(. == 1 ~ "Green", . == 2 ~ "Yellow", . == 3 ~ "Red")))