Left_join с Df1 и списком равных фреймов данных - PullRequest
0 голосов
/ 26 ноября 2018

У меня проблема с соединением 4 фреймов данных.Я работаю с удаленным доступом в защищенной среде, поэтому, к сожалению, я не могу предоставить вам скриншоты моего сеанса R и коды.

У меня R версии 3.4.1 и пакет tidyverse

Df1 - один фрейм данных имеет 280000 строк и 20 переменных, это мой основной набор данных, и он содержит данные о диагностике, больничных отделениях и данных о местоположении.

HA1, HA2, HA3 - каждый из 3 других наборов данных содержит от 23 до 25 миллионов строк и 7 переменных, переменные равны во всех 3 наборах данных.Наборы данных содержат данные о деятельности в области здравоохранения за 3 года.

Я хочу объединить эти наборы данных, используя переменную "A" с left_join.Например, поддержание только медицинской деятельности в HA1-3 с соответствующим диагнозом / больницей в Df1.

Я пробовал это как тест с HA1:

test = left_join(Df1, HA1, by= "A")

Это работало нормально.но после того, как я попытался добавить HA2 и HA3 к набору данных, он добавил новые переменные вместо заполнения NA уже добавленных переменных HA1.(var.x, var.y)

test2 = left_join (test, HA2, by= "A") 

test3 = left_join (test2, HA3, by= "A")

После этого я попытался выполнить rbind для наборов данных HA, но они слишком велики, и я получаю ошибку: «не удается выделить вектор размера ..».

Итак, я попробовал пакет purrr с функцией Reduce, но у меня возникла та же проблема

list(Df1, HA1, HA2, HA3) %>% reduce(left_join, by = "A")

В наборе данных, который я пытаюсь создать, есть 20 переменных Df 1 и 7 переменныхHA1-3.Я попытался добавить 7 переменных наборов данных HA один раз в Df1 и добавить все совпадения HA1-3 в те же столбцы.

Надеюсь, вы сможете помочь мне с этой проблемой без скриншотов R.

1 Ответ

0 голосов
/ 26 ноября 2018

left_join всегда будет добавлять новые столбцы, а не заполнять существующие.Простым решением для этого является использование coalesce для объединения трех новых столбцов в один.Вот пример с фиктивными данными и тремя фреймами данных:

d<-data.frame(A=LETTERS[1:5])
e<-data.frame(A=LETTERS[1:3],b=1:3)
f<-data.frame(A=LETTERS[4:5],b=4:5)
left_join(d,e,by="A") %>% left_join(f,by="A") %>%
mutate(newb=coalesce(b.x,b.y))

  A b.x b.y newb
1 A   1  NA    1
2 B   2  NA    2
3 C   3  NA    3
4 D  NA   4    4
5 E  NA   5    5
...