R: Создание нового столбца с использованием другого фрейма данных - PullRequest
0 голосов
/ 21 марта 2019

У меня есть два кадра данных:

1) данные1: data1 <- data.frame(Group = c(1, 2, 3), Region = c("Southeast Med, Southeast Low, Southwest Low, Northeast Med", "Northeast High, East Med, Midwest Med High", "Midwest Low, California and HI, West High"),stringsAsFactors=F)

2) data2: data2 <- data.frame(Region = c('California and HI', 'California and HI', 'Northeast High', 'California and HI', 'West High', 'Midwest Med High', 'California and HI', 'California and HI', 'California and HI', 'Southwest Low', 'Midwest Med High', 'California and HI', 'East Med', 'Southeast Low', 'Southeast Med', 'Midwest Med High', 'Southeast Med', 'West High', 'Northeast High', 'California and HI', 'West High', 'California and HI', 'California and HI', 'West High', 'California and HI', 'West High', 'California and HI', 'California and HI'))

Я хочу создать новый столбец в data2, скажем data2$Group, используя data1, где столбец группы проверяет, используя data1, какой регион подпадает под какую группу и заполняет это. Как я могу это сделать? Кроме того, скажем, data1 были списком вместо фрейма данных, какой был бы возможный подход?

1 Ответ

3 голосов
/ 21 марта 2019

Используя опубликованные вами наборы данных, вы можете сделать это

library(tidyverse)

# update data1
data1_upd = data1 %>% separate_rows(Region, sep = ", ")

# join datasets
data2_upd = data2 %>% left_join(data1_upd, by="Region")

Новый набор данных data2_upd будет выглядеть следующим образом:

#               Region Group
# 1  California and HI     3
# 2  California and HI     3
# 3     Northeast High     2
# 4  California and HI     3
# 5          West High     3
# 6   Midwest Med High     2
# 7  California and HI     3
# 8  California and HI     3
# 9  California and HI     3
# 10     Southwest Low     1
# 11  Midwest Med High     2
# 12 California and HI     3
# 13          East Med     2
# 14                      NA
# 15                      NA
# 16                      NA
# 17     Southeast Med     1
# 18         West High     3
# 19    Northeast High     2
# 20 California and HI     3
# 21         West High     3
# 22 California and HI     3
# 23 California and HI     3
# 24         West High     3
# 25 California and HI     3
# 26         West High     3
# 27 California and HI     3
# 28 California and HI     3

Обратите внимание, что этот подход использует точное совпадение строк для объединения двух наборов данных. Следовательно, он чувствителен к регистру, и любые пробелы до или после вашего региона будут «нарушать» соединение. Это означает, что если ваши данные не такие «чистые», как в вашем примере, вам, возможно, придется выполнить некоторую предварительную обработку (например, обновить регионы в нижнем регистре, удалить все начальные / конечные пробелы).

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