【问题标题】:Loading multiple .RData and binding into a single data.frame加载多个 .RData 并绑定到单个 data.frame
【发布时间】:2021-11-02 08:20:10
【问题描述】:

我在一个文件夹中有多个.RData。我可以按如下方式加载它们:

df1 <- data.frame(X = 1:10)
df2 <- data.frame(X = 1:10)

save(df1, file = "df1.RData", compress = "xz")
save(df2, file = "df2.RData", compress = "xz")

rm(list = ls())

load("df1.RData")
load("df2.RData")

并使用dplyr中的bind_rows函数绑定它们

library(tidyverse)
bind_rows(df1, df2)

我想知道是否可以加载所有文件并像这样绑定它们

list.files(
      path      = "."
    , pattern    = "*.RData"
    , full.names = TRUE
    )  %>%
  map_dfr(.x = ., .f = ~load(file = .x))

【问题讨论】:

    标签: r dplyr tidyverse purrr rdata


    【解决方案1】:

    您可以使用get() 从调用环境中返回数据,或者将它们加载到新环境中并在之后绑定它们。请注意,.Rdata 文件可以包含多个对象,但假设这些对象都是一致的,您可以这样做:

    library(purrr)
    library(dplyr)
    
    df1 <- data.frame(X = 1:10)
    df2 <- data.frame(X = 1:10)
    
    save(df1, file = "df1.RData", compress = "xz")
    save(df2, file = "df2.RData", compress = "xz")
    
    list.files(pattern = "\\.RData$") %>%
       map_df(~ get(load(file = .x)))
    
        X
    1   1
    2   2
    3   3
    4   4
    5   5
    6   6
    7   7
    8   8
    9   9
    10 10
    11  1
    12  2
    13  3
    14  4
    15  5
    16  6
    17  7
    18  8
    19  9
    20 10 
    

    或者:

    temp_env <- new.env()
    
    list.files(pattern = "\\.RData$")  %>%
      map(~load(file = .x, envir = temp_env)) 
    
    bind_rows(as.list(temp_env))
    

    【讨论】:

    • 感谢您提供非常有用的答案。函数get 正在做我正在寻找的事情。
    猜你喜欢
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 2020-11-02
    • 2019-10-15
    • 2013-11-16
    相关资源
    最近更新 更多