【问题标题】:Combine two lists of dataframes, dataframe by dataframe结合两个数据框列表,一个数据框一个数据框
【发布时间】:2014-01-03 18:12:56
【问题描述】:

我有一个毫无疑问的简单问题。我花了最后一个小时左右四处寻找解决方案,但显然遗漏了一些东西。如果这确实是重复的,请将我链接到正确的方法:

示例数据:

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"))

【问题讨论】:

    标签: r list merge dataframe


    【解决方案1】:
    > 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 ...
    

    【讨论】:

    • 太棒了!和我预期的一样简单。谢谢:)
    • 小问题:如果opr和timestamp中的dfs有不同的nrows怎么办?
    • @N.Varela 听起来您有一个新问题。考虑发布一个新的、单独的问题。您可以随时在帖子中链接回此链接。
    猜你喜欢
    • 2019-07-21
    • 1970-01-01
    • 2021-01-11
    • 2017-10-21
    • 2021-11-20
    • 2019-10-27
    • 2019-09-19
    • 1970-01-01
    相关资源
    最近更新 更多