通过循环读取后重命名R中的数据帧

时间:2015-09-15 17:06:57

标签: r

我试图从一个文件夹中读取一堆.tsv文件('测试'),我得到了这个:

files <- list.files("Test", pattern="*.tsv", full.names=TRUE)

for (i in 1:length(files)) assign(files[i], read.delim(files[i], na.strings = c(
"FAILED", "ERROR"))
)

这是有效的,但是它创建的数据框包括文件路径和扩展名(在本例中为Test/.tsv,导致名为Test/100_1.tsv的数据框。我一直在玩代码几个小时试图让它仅通过必要的信息命名每个数据框(例如,100_1)。如果有人有任何建议,这位新手会非常感谢你的帮助。

3 个答案:

答案 0 :(得分:1)

我建议将这些作为列表加载,而不是加载到assign的全局名称空间。

这样的东西
files <- list.files("Test", pattern="*.tsv", full.names=TRUE)
names(files) <- files
all.data <- lapply(files, function(fle) {
  read.delim(fle, na.strings=c("FAILED", "ERROR"))
})

将生成一个由filename键入的列表,这将更容易处理。

答案 1 :(得分:0)

我会创建一个标签对象,其中包含您要应用于数据框的名称。我制作的标签对象假设您始终具有相同的大小名称。应该做你想要的。

files <- list.files("Test", pattern="*.tsv", full.names=TRUE)
dflabels <- substr(files,5,nchar(files)-4)

for (i in 1:length(files)) assign(dflabels[i], read.delim(files[i], na.strings = c(
"FAILED", "ERROR"))
)

答案 2 :(得分:0)

如果您只是尝试获取100_1.tsv,则需要设置full.names = FALSE并预设工作目录,而不是在list.files中调用。

E.g。

setwd("C:/Your/Working/Directory/Test")    
files <- list.files(pattern="*.tsv")
for (i in 1:length(files)) assign(files[i], read.delim(files[i], na.strings = c(
"FAILED", "ERROR"))
)

full.names默认为FALSE