对文件夹中的所有元素应用相同的函数

Apply the same function over all the elements in a folder

我的计算机中有一个文件夹,其中包含 184.000 个不同的 .RData,所有这些都是代表特定资产的投资者交易的小数据框。 数据框代表 4.000 名投资者和 6.000 项资产之间的组合。 我的数据有漏洞,实际上我想使用 complete() 函数通过添加基于日期时间列的缺失行来完成每个数据帧。

我希望 R 对我电脑文件夹的所有元素应用 complete() 函数,但我不知道如何实现。
我想出了以下几行代码的基本想法,但我不知道如何告诉 R 将它应用到整个文件夹。

path_to_read \<- "dev/test-data/investors-rdata-assetbased/" # path to single .RData

path_to_save \<- "dev/test-data/investors-completedatetime/"

file_names \<- list.files(path_to_read, ".RData")

df$datetime \<- as.Date(df$datetime, format =  "%Y-%m-%d")
df \<-   complete(datetime = seq(min(datetime), max(datetime), by = "1 day"), fill = list(number = 0))

您可以使用 purrr R 包中的 map() 函数。

注: 我假设每个 RData 包含一个名为 dfdata.frame,其中至少有两列名为 datetimenumber .

首先,定义你的“完成日期”函数如下:

library(tidyverse)

complete_date <- function(df) {
  min_date <- min(df$datetime)
  max_date <- max(df$datetime)
  datetime = seq(min_date, max_date, by = "1 day")
  
  table <- tibble(datetime = datetime, number = 0)
  
  table %>% inner_join(df, by = "datetime")
}

我们将使用 map 在每个 RData 上应用此函数:

file_names %>% 
  map(function(file_name) {
    load(file_name) # Load RData first
    complete_date(df) # Apply the function
  })

这将创建一个包含所有完整 data.frames 的列表,您可以将其用作 save() 的 RData。