2013-12-16 26 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