2017-08-07 54 views
1

我正在使用兩個時間點從受訪者收集的數據。每個應答者的每個數據集都存儲爲一個單獨的文件。我有42位受訪者,所以我總共有84個文件。我已將所有這些文件編譯成一個84個元素的列表,其中列表中的每個元素都是一個數據幀。基於序列合併列表中的元素對

由於文件的命名方式,列表的第一個元素包含來自響應者A的第一個時間點的數據,而第二個元素包含來自響應者A的第二個時間點的數據。第三個元素包含數據來自響應者B的第一時間點,第四個元素包含來自響應者B的第二時間點的數據。等等

我想弄清楚如何創建一個循環,它將合併第一個和第二個元素,第三個和第四個元素等,這樣我的84元素列表就減少到了42元素列表。

以下是一些示例代碼。在這個例子中,每個受訪者都用向量「ID」中的值表示,被訪者的鍛鍊夥伴列在向量「名稱」中,這些鍛鍊夥伴的體重列在向量「Weight」和「Weight2」中:

Names <- c("Kevin", "Rich", "Frank") 
ID <- c("A1", "A1", "A1") 
Weight <- c(159, 200, 186) 
df1 <- data.frame(ID, Names, Weight) 

Names <- c("Kevin", "Rich", "Frank", "Kip", "Earl") 
ID <- c("A1", "A1", "A1", "A1", "A1") 
Weight2 <- c(170, 180, 190, 240, 255) 
df2 <- data.frame(ID, Names, Weight2) 

Names <- c("Sam", "Tim", "Bill", "Bobby") 
ID <- c("B2", "B2", "B2", "B2") 
Weight <- c(105, 155, 177, 310) 
df3 <- data.frame(ID, Names, Weight) 

Names <- c("Sam", "Eric", "Donald") 
ID <- c("B2", "B2", "B2") 
Weight2 <- c(120, 100, 205) 
df4 <- data.frame(ID, Names, Weight2) 

example_list <- list(df1, df2, df3, df4) 

example_merge1 <- merge.data.frame(df1, df2, by.x = "Names", by.y = "Names", all = TRUE) 

example_merge2 <- merge.data.frame(df3, df4, by.x = "Names", by.y = "Names", all = TRUE) 

我的列表看起來類似於上面標記的代碼創建的列表「example_list,」我試圖找出如何使之產生合併的數據幀碾過列表對象合併循環,出現在「example_merge1」和「example_merge2」中。

回答

0

這裏是經由基礎R一個想法,

m1 <- matrix(seq_along(example_list), ncol = 2, byrow = TRUE) 

lapply(split(m1, seq(nrow(m1))), function(i) 
        merge(example_list[i[1]], example_list[i[2]], by = 'Names', all = TRUE)) 

其中給出,

$`1` 
    Names ID.x Weight ID.y Weight2 
1 Frank A1 186 A1  190 
2 Kevin A1 159 A1  170 
3 Rich A1 200 A1  180 
4 Earl <NA>  NA A1  255 
5 Kip <NA>  NA A1  240 

$`2` 
    Names ID.x Weight ID.y Weight2 
1 Bill B2 177 <NA>  NA 
2 Bobby B2 310 <NA>  NA 
3 Sam B2 105 B2  120 
4 Tim B2 155 <NA>  NA 
5 Donald <NA>  NA B2  205 
6 Eric <NA>  NA B2  100