Jestem całkiem nowy w programowaniu, a także w data.table
w R - więc może to pytanie jest naprawdę proste, ale szukałem i nie mogłem znaleźć żadnych rozwiązań.
Próbuję dopasować 4 zmienne parami i dodać kolumnę z wartością odnośnika. W bazie, zrobiłbym merge(df1,df2, by.x=c("lsr","ppr"),by.y=c("li","pro"))
, gdzie df1 ma 9 coli, a df2 (2 to lsr i pro) df2 ma tylko 3, li, pro i "wartość", którą mnie interesują, alfa.
To działa dobrze, ale jak zaczynam być wielkim fanem data.table
, chciałbym to zrobić w sposób data.table - i ponieważ mam kilka milionów wierszy - więc podstawowa fuzja jest powolna (widziałem , że funkcje by.x i by.y oczekują na data.table, ale być może istnieje obejście tego problemu). Zobacz kilka przykładowych danych poniżej:data.table scalanie przez wiele kolumn
df2:
alpha li pro
1: 0.5000000 0.01666667 0.01666667
2: 0.3295455 0.03333333 0.01666667
3: 0.2435897 0.05000000 0.01666667
4: 0.1917808 0.06666667 0.01666667
5: 0.1571429 0.08333333 0.01666667
df1:
demand rtime mcv mck ppr mlv mlk lsr
1: 0.3 1 357.57700 0.099326944 0.01666667 558.27267 0.155075741 0.01666667
2: 0.3 10 548.75433 0.152431759 0.01666667 614.30667 0.170640741 0.03333333
3: 0.3 11 314.55767 0.087377130 0.01666667 636.48100 0.176800278 0.03333333
4: 0.3 2 312.15033 0.086708426 0.01666667 677.48100 0.188189167 0.06666667
5: 0.3 3 454.47867 0.126244074 0.01666667 608.92067 0.169144630 0.01666667
---
6899196: 0.6 5 537.92673 0.149424093 1.00000000 537.92673 0.149424093 1.00000000
6899197: 0.6 6 277.34732 0.077040923 1.00000000 277.34732 0.077040923 1.00000000
6899198: 0.6 7 73.31484 0.020365235 1.00000000 73.31484 0.020365235 1.00000000
6899199: 0.6 8 32.04197 0.008900546 1.00000000 32.04197 0.008900546 1.00000000
6899200: 0.6 9 14.59008 0.004052799 1.00000000 14.59008 0.004052799 1.00000000
ostatni, być może w okolicy jest, że w df2 mam unikatowe wiersze, aw DF1, mam wiele duplikatów w odniesieniu do LSR i PPR. Próbowałem również ustawić dwa klucze i połączyć je z metodą data.table, dodając nową kolumnę z alfą. Ale bez powodzenia. Dziękuję Ci za całą twoją pomoc!
Jeśli nie potrzebujesz sprzężenia zewnętrznego, możesz po prostu zrobić lewe, prawe połączenie lub wewnętrzne połączenie przy użyciu łączenia binarnego. Pytanie, które z nich chcesz. Chociaż sądząc po twoim podstawowym kodzie R, wydaje ci się, że jesteś bliski wewnętrznemu złączeniu? A także, którą kolumnę chcesz zachować? Nie masz również kolumny 'pro' w' df1' –
Dzięki. Właściwie uważam, że w tym przypadku wewnętrzne i lewe łączenia są takie same, ponieważ wszystkie kombinacje lsr i ppr, lub li i pro są zawarte zarówno w df1 jak i df2. A brak pro w df1 to literówka !! Przepraszam za to, miałem na myśli, ppr w df1, będę edytować i poprawiać. Chciałbym zachować wszystkie kolumny z df1 i dodać alfa jako nową kolumnę –
Jeśli wszystko czego potrzebujesz to lewe dołączenie do 'df1' podczas aktualizacji kolumny' alpha', jest to proste sprzężenie binarne. Spróbuj 'setkey (df1, lsr, ppr); setkey (df2, li, pro); df1 [df2, alpha: = i.alpha]; df1' –