簡體   English   中英

讀取多個 RDS 文件

[英]Reading multiple RDS files

我有一個包含多個 RDS 文件(300+)的目錄,我想閱讀和合並這些 RDS 文件共享相同的基本格式,但每個文件中的行數和列數不同。 我有讀取一個 RDS 文件的簡單代碼(所有文件都具有相同的“Events-3digitnumber-4digitnumber-6digitnumber.RDS”)

    mydata <- readRDS("Events-104-2014-752043.RDS")

作為數據科學的新手,我確定我缺少這個簡單的答案,但我是否必須使用 list.files() 之類的東西以及 lapply 或一些 for 循環。

只是添加一個tidyverse答案:

library(tidyverse)

df <- list.files(pattern = ".RDS") %>%
  map(readRDS) %>% 
  bind_rows()

更新:

它建議使用map_dfr用於綁定行和map_dfc綁定列,更高效:

df <- list.files(pattern = ".RDS") %>%
  map_dfr(readRDS)

因為從溶液中FMM並沒有為我巨大的數據集工作,我換成bind_rows()data.table::rbindlist()

library(tidyverse)
library(data.table)

df <- list.files(pattern = ".rds") %>%
      map(readRDS) %>% 
      data.table::rbindlist()

首先是一個可重現的示例:

data(iris)
# make sure that the two data sets (iris, iris2) have different columns
iris2 = copy(iris)
iris2$Species2 = iris2$Species
iris2$Species = NULL

saveRDS(iris, "Events-104-2014-752043.RDS")
saveRDS(iris2, "Events-104-2015-782043.RDS")

現在你需要

  1. 查找所有文件名
  2. 讀取數據
  3. 將數據合並到一張表中(如果需要)

我將使用data.table::rbindlist因為當您設置fill = TRUE時,它將為您處理不同的列:

require(data.table)
files = list.files(path = '.', pattern = '^Events-[0-9]{3}-[0-9]{4}-[0-9]{6}\\.RDS$')
dat_list = lapply(files, function (x) data.table(readRDS(x)))
dat = rbindlist(dat_list, fill = TRUE)

補充上面的 FMM 答案,您可能需要在 list.files 命令中包含“full.names=TRUE”,以允許 map_dfr 正確讀取它,具體取決於文件的路徑。

df <- list.files(pattern = ".RDS", full.names=T)%>%
 map_dfr(readRDS)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM