dplyr mutate для замены определенных значений во фрейме данных - PullRequest
1 голос
/ 27 марта 2019

У меня есть фрейм данных, который состоит из символов «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 ]

2 голосов
/ 27 марта 2019

Одно решение может быть с 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
2 голосов
/ 27 марта 2019

Создайте именованный вектор с отображениями и затем установите его подмножество, используя 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)]

data

df <- data.frame(v1 = c("a", "b", "x", "y"),
                 v2 = c("a", "b", "a", "y"), stringsAsFactors = FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...