r - 使用 For 循环创建具有增量后缀的多个对象,然后将 .csv 文件读入每个新对象(也具有增量后缀)
问题描述
我刚开始学习R,所以请原谅我的无知!我正在阅读大量 .csv 文件,每个文件都与不同的年份(2010-2019)相关。然后,我根据其中一列中的变量过滤 .csv 文件(因为数据集非常大。目前我正在使用以下代码执行此操作,然后每年重复一次:
data_2010 <- data.table::fread("//Project/2010 data/2010 data.csv", select = c("date", "id", "type"))
data_b_2010 <- data_2010[which(data_2010$type=="ABC123")]
rm(data_2010)
我想做的是使用 For 循环为每年创建新的对象 data_20xx,然后也读取每年的 .csv 文件(并应用“类型”过滤器)。
我想我知道如何在 For 循环中创建对象,但不完全确定如何分配 .csv 文件并更改文件路径字符串,以便它每年更新(即“//Project/2010 data/2010 data” .csv”到“//Project/2011 data/2011 data.csv”)。
任何帮助将不胜感激!
解决方案
下次请提供一个可重复的示例,以便我们为您提供帮助。
我会使用data.table
which contains 专门的功能来做你想做的事。
library(data.table)
setwd("Project")
allfiles <- list.files(recursive = T, full.names = T)
allcsv <- allfiles[grepl(".csv", allfiles)]
data_list <- list()
for(i in 1:length(allcsv)) {
print(paste(round(i/length(allcsv),2)))
data_list[i] <- fread(allcsv[i])
}
data_list_filtered <- lapply(data_list, function(x) {
y <- data.frame(x)
return(y[which(y["type"]=="ABC123",)])
})
result <- rbindlist(data_list_filtered)
- 首先,
list.files
默认情况下会告诉您工作目录中包含的所有文件。 - 其次,使用快速高效的功能将每个
csv
文件读入。data_list
list
fread
- 第三,根据要求在循环内进行过滤。
- 第四,使用
rbindlist
fromdata.table
到rbind
所有这些data.table
's。 - 最后,如果您不熟悉
data.table
语法,可以运行setDF(result)
将结果转换回data.frame
.
我强烈建议您学习data.table
语法,因为它对于表格数据操作非常强大且高效。这些小插曲将帮助您入门。
推荐阅读
- octobercms - OCMS 片段有问题
- android - 如何在android中将json对象从json数组转换为字符串数组
- kubernetes - 如何在fuelPHP中将日志输出到StackDriver
- javascript - 了解嵌套函数如何在 javascript 中工作
- swift - 在 UICollection 视图单元中看不到任何数据
- xamarin.forms - 接收 FCM 通知时如何在 Xamrin.Forms 上打开 ContentPage?
- c# - IdentityServer4 快速入门 IdentityServer 作为身份/api 端点和 MVC 客户端
- r - 带有数据点的 barplot() - 基础 R
- reinforcement-learning - 为什么贝尔曼方程的直接解的时间复杂度是 n^3?
- android - Icon问题localNotificationsPlugin,如何正确添加app Icon