r - R 使用一个字符向量来保存 bind_rows 的 data.frames 的名称
问题描述
我正面临一个我认为很容易解决的问题,但结果却远远超出了我的视野。我想我脑子里有一个误解。
我有一些从文件中导入的 data.frames。所有这些都具有相同名称的完全相同的列。由于它们很多,我想使用 bind_rows 将它们组合成一个 data.frame 的过程自动化。
files <- list.files(path = "/home/username/Documents/", pattern = ".txt")
batch.import <- function(filename) {
name <- unlist(strsplit(filename,"\\."))[1] # get rid of .txt
df <- read_tsv(filename)
colnames(df) <- c("name1", "name2", "name3", "name4")
assign(name, df, envir = .GlobalEnv)
}
map(files,batch.import)
dataframes <- unlist(strsplit(files,"\\."))[seq(1,length(unlist(strsplit(files,"\\."))),2)] # This produces a chr vector with all the data.frames I want to merge
我显然尝试的第一件事是:
combinedData <- bind_rows(dataframes)
本来太容易了……我同意。因为它是我真正理解的 chr 向量,所以这并不是指 data.frames,而只是试图对文本做一些事情。
所以我尝试使用combinedData <- bind_rows(paste(dataframes))
我认为可以完成这项工作的。但它也不会合并 data.frames 。
所以我尝试了一些更复杂的东西,比如 for 循环(我也尝试在map()
这里使用用法,不幸的是我不记得了):
for (df in dataframes) {
if (exists("combinedData") {
combinedData <- bind_rows(combinedData, .data[[df]]) # Here I think is the error (if not already before) I also tried {{}}
} else {
cobinedData <- .data[[df]]
}
}
{{}}
所以从我读到的东西到现在,我必须对or做点什么,.data[[]]
但这个概念仍然没有渗透到我的突触中。
有什么建议可以使用我的 chr-vector 的 data.frame 名称来组合相应的 data.frames?
非常感谢!
迈克尔
解决方案
你可以使用的是foreach
。这是伪代码
library(foreach)
library(dplyr)
files <- list.files(path = "/home/username/Documents/", pattern = ".txt", full.name = TRUE)
# foreach will return a list of df which you can combine later using bind_rows
list_df <- foreach(i_file = files) %do% {
df <- read_tsv(filename)
colnames(df) <- c("name1", "name2", "name3", "name4")
df
}
combine_df <- bind_rows(list_df)
如果要创建数据导入的命名列表
files_name_no_ext <- gsub(pattern = "\\.txt", replacement = "", files)
names(list_df) <- files_name_no_ext
推荐阅读
- reactjs - 生成反应组件
- python-3.x - 我的输出打印不正确,我似乎不明白为什么
- c# - 如何向服务器端 Blazor 项目添加控制器(而非视图)支持
- kubernetes - 为什么在 istio 中有两种不同的方式来启用 mTLS?
- r - 将 gganimate 与 geom_point 和 geom_line 一起使用
- json - 为什么将数组编码为 json 格式会产生 json 对象?
- java - 在请求权限之前关闭 Android 应用程序?怎么解决?
- c# - 如何使用 C# 在 MouseDown 后沿任何方向绘制矩形?
- python - 与 super() 调用有点混淆
- database - 如何在这个集群(Ubuntu)中创建一个postgresql(版本10)集群和数据库?