Заменить каждое вхождение факторной переменной в одном столбце строкой из другого кадра данных R - PullRequest
0 голосов
/ 10 сентября 2018

Скажем, у меня есть два кадра данных. Один - мой «основной» df, а другой - тот, который я использую для замены значений в основном df.

Таким образом, в столбце cd из dfMain каждый раз, когда поднимается уровень фактора orange, я хочу заменить его соответствующей строкой из dfReplace (которая имеет имя строки с именем orange)

Это приведет к тому, что dfMain получит 3 столбца в ширину, потому что столбец cd исчезнет, ​​и он получит столбцы X1, X2, X3, X4

Ключевым моментом здесь является то, что мне нужно, чтобы это было максимально эффективно, потому что мои фактические данные намного, намного длиннее

Воспроизводимый пример:

set.seed(42)
dfMain <- data.frame('av' = sample.int(10, 100, replace = TRUE), 
                     'ba' = sample.int(10, 100, replace = TRUE), 
                     'cd' = sample(c('orange', 'apple', 'banana', 'strawberry', 'blueberry', 'blackberry'), 100, replace = TRUE))

dfReplace <- data.frame('X1' = runif(6),
                        'X2' = runif(6),
                        'X3' = runif(6),
                        'X4' = runif(6))
rownames(dfReplace) <- c('orange', 'apple', 'banana', 'strawberry', 'blueberry', 'blackberry')

1 Ответ

0 голосов
/ 10 сентября 2018

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

library(dplyr)
dfReplace2 <- dfReplace %>%
  add_rownames(var = "cd")

dfMain %>%
  mutate(cd = as.character(cd)) %>%
  left_join(dfReplace2)

Я оставил исходное поле 'cd', но его можно удалить с помощью %>% select(-cd).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...