如何在 R 中导入文件名中包含特定单词的 .csv 文件?
Posted
技术标签:
【中文标题】如何在 R 中导入文件名中包含特定单词的 .csv 文件?【英文标题】:How to import a .csv file with a specific words in the file name in R? 【发布时间】:2019-06-03 17:53:10 【问题描述】:感谢您阅读这篇文章。我几乎每天都将 .csv 文件从 Qualtrics 平台导入到特定文件夹(即“Thesis_Folder”)。每当我将 .csv 文件导入 Thesis_Folder 时,.csv 文件的默认名称包括今天的日期和时间。换句话说,每次我从 Qualtrics 导入数据时,.csv 文件的名称都会发生变化(例如,“论文数据 June+3_2019++12:48”)。但是,.csv 文件始终包含“论文数据”字样。我的问题是:如果文件名中包含“论文数据”,我该如何导入 .csv 文件?
list.files() 列出具有特定模式的文件的名称,但它不会将它们作为数据框导入。谢谢。
【问题讨论】:
CSV 文件...read.csv
?
【参考方案1】:
files <- list.files("C:/Users/User/Desktop/csv", pattern=".*Thesis.*\\.csv$", full.names=TRUE)
list_of_frames <- lapply(files, read.csv)
将所有 data.frames 存储在一个列表中。
【讨论】:
(1)list.files(..., pattern=".*Thesis.*\\.csv$")
,跳过grepl
。 (2) 应该可能包含list.files(..., full.names=TRUE)
,否则在当前目录以外的目录中将无法找到它们。 (3)assign
工作流效率低,建议list_of_frames <- lapply(files, read.csv)
(或fread
)。如果您要对许多帧执行相同或非常相似的操作,将它们作为单独的变量保留是低效的。
(4) 如果必须使用for
循环,我建议使用seq_along(files)
或seq_len(length(files))
而不是1:length(files)
。为什么?当您的文件列表由于某种原因为空 (character(0)
) 时,for (i in 1:0)
将运行两次,而不是预期的零次(亲自查看:1:length(character(0))
)。
运行良好,非常感谢@DSGym 和@r2evans。我刚刚添加了这个短代码以将其存储为数据框: Thesis_Data = as.data.frame(list_of_frames[[1]])
你不需要as.data.frame
。您的数据已存储为 data.frame
感谢您的注意,@r2evans。我所需要的只是导入名称中包含“论文数据”一词的 .csv 数据文件,在您和 DSGym 的帮助下,我能够做到这一点。我只有一个数据文件,而不是多个数据文件。【参考方案2】:
未经测试,因为您不提供示例数据,但这应该可以:
library("rio")
library("dplyr")
data <- list.files( # find respective files
path = "./Thesis_Folder",
pattern = ".csv$", # you might want a more specific regex if possible
full.names = TRUE
) %>%
lapply(import) %>% # import from rio usually works well
bind_rows() # bind the list of data.frames to one big df
【讨论】:
感谢您抽出宝贵时间提供帮助,@JBGruber。不幸的是,这段代码不起作用,它导入了空的数据框对象。另外,我不确定这是否可以做到,因为此代码不包含特定单词(论文数据)。 正如我在上面所写的,您可能希望更改模式以仅获取您真正想要的文件。如果所有文件都真正以“论文数据”开头,您可能需要"Thesis data.+.csv$"
之类的东西。我现在对此进行了测试,代码本身可以工作。以上是关于如何在 R 中导入文件名中包含特定单词的 .csv 文件?的主要内容,如果未能解决你的问题,请参考以下文章