dplyr mutate替换数据框中的特定值

时间:2019-03-27 08:05:00

标签: r dplyr mutate

我有一个由字符“ 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)

2 个答案:

答案 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