2015-01-31 4 views
2

У меня очень большой фреймворк, который мне нужен, чтобы присоединиться к другому фреймворку данных на двух столбцах. Я использую merge для выполнения ir, но R исчерпывает память, чем больше таблицы получают. Есть ли аналогичное решение с использованием dplyr или plyr? Я слышал, что для этого требуется значительно меньше памяти. Я знаю, как использовать функцию соединения в plyr вообще, с чем я борюсь, является объединение двух столбцов. Слияние synatx Я использую ниже:Использование plyr для объединения двух массивных данных в двух столбцах

Correlation_Table <- merge(Correlation_Table, inter, by.x = c(1,2), by.y = c(1,2), all.x = TRUE, all.y = TRUE) 

Так, например, если у меня есть следующие два dataframes:

> head(df1) 
    x y   z   a 
1 1 2 429.57410 43.746670 
2 2 3 717.98184 524.288886 
3 3 4 601.66938 640.245469 
4 4 5 87.41476 318.964765 
5 5 6 586.22234 196.759991 
6 6 7 619.82194 3.308136 
> head(df2) 
    b c  d 
1 5 8 152.2855 
2 6 9 191.5406 
3 7 10 197.0520 
4 8 11 175.4209 
5 9 12 157.6239 
6 10 13 136.3286 

Где столбцы х и у из df1 являются размеры, а колонны и б c of df2 также являются измерениями, а другие столбцы являются мерами. Моя цель здесь заключается в создании нового блока данных всех трех измерений, где записи df1.x и df1.y соответствуют df2.a и df2.b.

Возможно ли это использование plyr?

+0

Вы можете проверить '' full_join' из dplyr' – akrun

+0

Я просто читал о full_join. Как указать, какие столбцы вы хотите объединить, используя full_join? Из примеров, которые я видел, это не похоже на то, что вы можете. – mangodreamz

+0

Существует аргумент 'by' – akrun

ответ

6

Вы можете попробовать

library(dplyr) 
res1 <- full_join(df1, df2, by=c('x'='b', 'y'='c')) 

Согласно ?full_join

по: символ вектор переменных соединим. Если «NULL», значение по умолчанию, «join» будет выполнять естественное соединение, используя все переменные с общими именами в двух таблицах. В сообщении перечислены переменные , чтобы вы могли проверить, что они правы. Для объединения разных переменных в x и y используется именованный вектор. Например, 'by = c ("a" = "b")' будет соответствовать 'x.a' в 'y.b'.

и сравнить результаты с

res2 <- merge(df1, df2, by.x = c(1,2), by.y = c(1,2), 
          all.x = TRUE, all.y = TRUE) 

Примечание: Порядок строк будут отличаться

+0

Могу ли я сделать это по индексам столбцов, а не по именам? – mangodreamz

+0

@Ben Я думаю, что это не будет работайте здесь Почему вам нужны индексы вместо имен? Индексы могут быть немного неспецифическими по сравнению с именами. – akrun

+0

Просто из любопытства. – mangodreamz

Смежные вопросы