2013-12-16 31 views
9

我有什麼是毫無疑問的一個簡單的問題。我花了最近一個小時左右的時間尋找解決方案,但顯然缺少一些東西。如果這確實是一個重複的,請聯繫我這樣做的正確方法:結合兩個數據幀的列表,dataframe的數據幀

示例數據:

names <- c("Cycling1.opr", "Cycling2.opr", "Cycling3.opr") 
mydf1 <- data.frame(V1=c(1:5), V2=c(21:25)) 
mydf2 <- data.frame(V1=c(1:10), V2=c(21:30)) 
mydf3 <- data.frame(V1=c(1:30), V2=c(21:50)) 
opr <- list(mydf1,mydf2,mydf3) 
mydf4 <- data.frame(timestamp=c(1:5)) 
mydf5 <- data.frame(timestamp=c(1:10)) 
mydf6 <- data.frame(timestamp=c(1:30)) 
timestamp <- list(mydf4,mydf5,mydf6) 
names(opr) <- names 
names(timestamp) <- names 

每個列表(OPR和時間戳)總是有相同數量的data.frames並具有當相同的名稱,每個這些data.frames始終是相同的長度。我想要做的是將每個類似命名的數據框合併爲一個數據框,作爲最終列表(可能名爲finalopr)的一部分,使其結構如下。

dput(finalopr) 
list(structure(list(V1 = 1:5, V2 = 21:25, timestamp = 1:5), .Names = c("V1", 
"V2", "timestamp"), row.names = c(NA, -5L), class = "data.frame"), 
structure(list(V1 = 1:10, V2 = 21:30, timestamp = 1:10), .Names = c("V1", 
"V2", "timestamp"), row.names = c(NA, -10L), class = "data.frame"), 
structure(list(V1 = 1:30, V2 = 21:50, timestamp = 1:30), .Names = c("V1", 
"V2", "timestamp"), row.names = c(NA, -30L), class = "data.frame")) 

回答

10
> mapply(cbind, opr, timestamp, SIMPLIFY=FALSE) 
$Cycling1.opr 
    V1 V2 timestamp 
1 1 21   1 
2 2 22   2 
3 3 23   3 
4 4 24   4 
5 5 25   5 

$Cycling2.opr 
    V1 V2 timestamp 
1 1 21   1 
2 2 22   2 
3 3 23   3 
4 4 24   4 
5 5 25   5 
6 6 26   6 
7 7 27   7 
8 8 28   8 
9 9 29   9 
10 10 30  10 

$Cycling3.opr 
    V1 V2 timestamp 
1 1 21   1 
2 2 22   2 
3 3 23   3 
4 4 24   4 
5 5 25   5 
6 6 26   6 
7 7 27   7 
8 8 28   8 
9 9 29   9 
10 10 30  10 
11 11 31  11 
12 12 32  12 
13 13 33  13 
14 14 34  14 
15 15 35  15 
16 16 36  16 
17 17 37  17 
18 18 38  18 
19 19 39  19 
20 20 40  20 
21 21 41  21 
22 22 42  22 
23 23 43  23 
24 24 44  24 
25 25 45  25 
26 26 46  26 
27 27 47  27 
28 28 48  28 
29 29 49  29 
30 30 50  30 

這裏的結構:

> str(mapply(cbind, opr, timestamp, SIMPLIFY=FALSE)) 
List of 3 
$ Cycling1.opr:'data.frame': 5 obs. of 3 variables: 
    ..$ V1  : int [1:5] 1 2 3 4 5 
    ..$ V2  : int [1:5] 21 22 23 24 25 
    ..$ timestamp: int [1:5] 1 2 3 4 5 
$ Cycling2.opr:'data.frame': 10 obs. of 3 variables: 
    ..$ V1  : int [1:10] 1 2 3 4 5 6 7 8 9 10 
    ..$ V2  : int [1:10] 21 22 23 24 25 26 27 28 29 30 
    ..$ timestamp: int [1:10] 1 2 3 4 5 6 7 8 9 10 
$ Cycling3.opr:'data.frame': 30 obs. of 3 variables: 
    ..$ V1  : int [1:30] 1 2 3 4 5 6 7 8 9 10 ... 
    ..$ V2  : int [1:30] 21 22 23 24 25 26 27 28 29 30 ... 
    ..$ timestamp: int [1:30] 1 2 3 4 5 6 7 8 9 10 ... 
+0

好極了!簡單如我所料。謝謝:) – user1912925

+0

小問題:如果opr和timestamp中的dfs有不同的nrows會怎麼樣? –

+1

@ N.Varela聽起來像你有一個新的問題。考慮發佈一個新的,單獨的問題。你可以隨時鏈接回你的文章。 – Thomas