Мне известны вопросы о слиянии фреймов данных в 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 (+).
Надеюсь, это имеет смысл - спасибо всем за помощь!