Запись определенных значений столбцов с использованием списка ссылок - PullRequest
1 голос
/ 28 мая 2019

Мой фрейм данных выглядит следующим образом

data = data.frame(ID=c(1,2,3,4,5,6,7,8,9,10),
              Gender=c('Male','Female','Female','Female','Male','Female','Male','Male','Female','Female'))

И у меня есть список ссылок, который выглядит примерно так -

ref=list(Male=1,Female=2)

Я хочу заменить значения в столбце Genderиспользуя этот список ссылок, без добавления нового столбца в мой фрейм данных.

Вот моя попытка

do.call(dplyr::recode, c(list(data), ref))

, которая дает мне следующую ошибку -

неприменимометод для «перекодирования» применяется к объекту класса «data.frame»

Любые входные данные будут с благодарностью

Ответы [ 5 ]

2 голосов
/ 28 мая 2019

Вы можете unlist ref, чтобы дать вам именованный вектор кодов, а затем индексировать это с вашими данными:

transform(data,Gender=unlist(ref)[as.character(Gender)])
   ID Gender
1   1      1
2   2      2
3   3      2
4   4      2
5   5      1
6   6      2
7   7      1
8   8      1
9   9      2
10 10      2
2 голосов
/ 28 мая 2019

В базе R:

data$Gender = sapply(data$Gender, function(x) ref[[x]])

2 голосов
/ 28 мая 2019

Вы можете использовать factor, т.е.

factor(data$Gender, levels = names(ref), labels = ref)
#[1] 1 2 2 2 1 2 1 1 2 2
2 голосов
/ 28 мая 2019

Можно сделать left_join после stack, вставив 'ref' list в двух столбец data.frame

library(dplyr)
left_join(data, stack(ref), by = c('Gender' = 'ind')) %>%
    select(ID, Gender = values)

A base R подход будет

unname(unlist(ref)[as.character(data$Gender)])
#[1] 1 2 2 2 1 2 1 1 2 2
1 голос
/ 28 мая 2019

Удивительно, но это тоже работает:

data$Gender <- ref[as.character(data$Gender)]

#> data
#    ID Gender
# 1   1      1
# 2   2      2
# 3   3      2
# 4   4      2
# 5   5      1
# 6   6      2
# 7   7      1
# 8   8      1
# 9   9      2
# 10 10      2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...