我有一个由字符“ a”,“ b”,“ x”,“ y”组成的数据框。
df <- data.frame(v1 = c("a", "b", "x", "y"),
v2 = c("a", "b", "a", "y"))
现在,我想用以下方案替换所有值,并将整个数据框转换为数字。
“ a”-> 0 “ b”-> 1 “ x”-> 1 “ y”-> 2
我知道使用mutate_all
一定可以做到这一点,但我不知道怎么做
df %>% mutate_all(replace("a", 1)) %>%
mutate_all(is.character, as.numeric)
答案 0 :(得分:2)
使用映射创建命名向量,然后使用mutate_all
vec <- c(a = 0, b = 1, x = 1, y = 2)
library(dplyr)
df %>% mutate_all(~vec[.])
# v1 v2
#1 0 0
#2 1 1
#3 1 0
#4 2 2
在基数R中,它只是
df[] <- vec[unlist(df)]
数据
df <- data.frame(v1 = c("a", "b", "x", "y"),
v2 = c("a", "b", "a", "y"), stringsAsFactors = FALSE)
答案 1 :(得分:2)
一种解决方案可能是使用case_when
:
df %>%
mutate_all(funs(case_when(. == "a" ~ 0,
. %in% c("b", "x") ~ 1,
. == "y" ~ 2,
TRUE ~ NA_real_)))
# v1 v2
# 1 0 0
# 2 1 1
# 3 1 0
# 4 2 2