对文件夹中的所有元素应用相同的函数
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 包含一个名为 df 的 data.frame
,其中至少有两列名为 datetime 和 number .
首先,定义你的“完成日期”函数如下:
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。
我的计算机中有一个文件夹,其中包含 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 包含一个名为 df 的 data.frame
,其中至少有两列名为 datetime 和 number .
首先,定义你的“完成日期”函数如下:
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。