Объединить кадры данных неравной длины в R на основе переменной соответствия? - PullRequest
0 голосов
/ 06 февраля 2019

Мне известны вопросы о слиянии фреймов данных в R, но я не нашел решения своей проблемы после изнурительного поиска.

У меня есть два фрейма данных в R: один содержит информацию о населении (здесь, организации, n = ~ 4200), включая их регионы, штаты, округа, названия программ и т. д .;другая содержит только информацию о округе и штате для 509 уникальных комбинаций округов-штатов.

Мне нужно сопоставить большой информационный кадр с меньшим информационным, так что я в конечном итоге получаю объединенный фрейм данных, в котором N строк равнок меньшему фрейму данных.

Например, большой фрейм данных (n = ~ 4200 строк) выглядит примерно так:

County        State    Court     Program  Court.Type  ...   ...  ...
String1       CT       Court1    String1  1
String1       AL       Court2    String2  2
String1       CA       Court3    String3  3
String1       IL       Court4    String4  2

Маленький фрейм данных (n = 509) выглядит примерно так:this:

State   County    QuantData   ...   ...
AL      String1   xxxxx
NY      String1   xxxxx
NM      String1   xxxxx

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

В конечном итоге мне нужно получить 509 строк сопоставленных данных в новом фрейме данных.

Чтобы упростить сопоставление, я сделал следующее:

courts$match = paste(courts$State,courts$County) # courts is the large df
sub$match = paste(sub$State,sub$County # sub is the small df

Затем я сделал это:

df = merge(courts, sub, by="match", all=F) # returns only 4 rows

df = merge(courts, sub, by="match", all=T) # returns well over 4000, but without matching the values

Теперь я должен сказать, что в большом наборе данных может происходить несколько совпадений по округам штатов, поскольку некоторые округа в штатах предоставляют несколько сервисных услуг.представляют интерес, часто в перекрывающихся местоположениях.

Однако в небольшом наборе данных это уникальные пары графства штатов.Таким образом, в конечном слиянии можно получить чуть больше 509, но определенно не 4000 (+).

Надеюсь, это имеет смысл - спасибо всем за помощь!

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Спасибо всем за ответы!

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

0 голосов
/ 06 февраля 2019

Вы уже пробовали all.x = T?Если вы используете all = T, все значения x и y сохраняются в таблице.

all <- data.frame(County=rep("String1",4), State=c("CT", "AL", "CA","IL"))
lookup <- data.frame(State=c("AL", "IL", "NM"), County=rep("String1", 3), QuantData=c(1,2,3))

all$key <- paste(all$State, all$County, sep="")
lookup$key <- paste(lookup$State, lookup$County, sep="")

result <- merge(all, lookup, by="key", all.x=T)

enter image description here

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