2015-10-15 122 views
0

如何根據「business_id」和「type」變量合併R中的兩個列表。嘗試了幾個選項,但他們沒有工作,包括將它們轉換爲數據框並嘗試使用合併功能合併它們。如何根據鍵值合併R中的兩個列表

的名單

LIST1 
$ :List of 5 
    ..$ business_id : chr "ABC" 
    ..$ full_address : chr "DEF" 
    ..$ hours  : chr "4-6PM" 
    ..$ open   : logi TRUE 
    ..$ type   : chr "business" 

LIST2 
$ :List of 3 
    ..$ checkin_info:List of 3 
    .. ..$ 7-6 : num 1 
    .. ..$ 15-0: num 1 
    .. ..$ 15-3: num 1 
    ..$ type  : chr "business" 
    ..$ business_id : chr "ABC" 

結果應該是

合併的列表 $:6 名單.. $ business_id:字符 「ABC」 .. $ full_address:字符 「DEF」 .. $ hours:chr「4-6PM」 .. $ open:logi TRUE .. $ type:chr「business」 .. $ checkin_info:List of 3 .. .. $ 7-6:num 1 .. .. $ 15-0:num 1 .. .. $ 15-3:num 1

+1

你應該提供一個[重複的例子(http://stackoverflow.com/questions/5963269/how-to-make具有樣本輸入數據(以複製/粘貼友好的格式)和期望的輸出。請準確描述「合併」列表的含義。 – MrFlick

回答

1

您還沒有提供可重複的示例 - 請參閱上面的鏈接。然而,這裏是一個重複的例子,來說明你的問題的心臟的概念:

list1 <- list(business_id = 1:10, 
       type = letters[1:10], 
       values_1 = rnorm(10, 1)) 
# List of 3 
# $ business_id: int [1:10] 1 2 3 4 5 6 7 8 9 10 
# $ type  : chr [1:10] "a" "b" "c" "d" ... 
# $ values_1 : num [1:10] 1.346 1.01 0.664 0.495 1.678 ... 

list2 <- list(business_id = 5:14, 
       type = letters[5:14], 
       values_2 = rpois(10, 50)) 
# List of 3 
# $ business_id: int [1:10] 5 6 7 8 9 10 11 12 13 14 
# $ type  : chr [1:10] "e" "f" "g" "h" ... 
# $ values_2 : int [1:10] 49 45 52 48 53 49 43 49 49 54 

merge(list1, list2, by = c("business_id", "type"), all = TRUE) 

# business_id type values_1 values_2 
# 1   1 a 1.34647449  NA 
# 2   2 b 1.00967581  NA 
# 3   3 c 0.66401918  NA 
# 4   4 d 0.49516496  NA 
# 5   5 e 1.67790930  49 
# 6   6 f 1.10751253  45 
# 7   7 g 3.51306102  52 
# 8   8 h 2.05527040  48 
# 9   9 i 0.08864909  53 
# 10   10 j -1.03377394  49 
# 11   11 k   NA  43 
# 12   12 l   NA  49 
# 13   13 m   NA  49 
# 14   14 n   NA  54