结合两个数据帧列表,dataframe数据帧

时间:2013-12-16 11:11:38

标签: r list merge 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和timestamp)始终具有相同数量的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"))

1 个答案:

答案 0 :(得分:11)

> 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 ...