Ros*_*920 7 import for-loop r append
我有一个包含142个制表符分隔文本文件的文件夹.每个文件有19个变量,然后是下面的一些行(通常不超过30行,但它会有所不同).我想自动在R中使用这些文件做几件事,我似乎无法得到我想要的代码.我是循环的新手,我从stackoverflow的以前的帖子中得到了两段代码,但似乎无法弄清楚如何组合它们的函数.
我想在将文件读入R时将文件名转换为变量,以便每行都有标识文件名
将所有文件(带有文件名变量和无标题)连接到一个尺寸为Yx19的数据框中,其中Y =但是有很多结果行.
我可以使用以下代码创建142个数据帧的列表:
myFiles = list.files(path="~/Documents/ForR/", pattern="*.txt")
data <- lapply(myFiles, read.table, sep="\t", header=FALSE)
names(data) <- myFiles
for(i in myFiles)
data[[i]]$Source = i
do.call(rbind, data)
Run Code Online (Sandbox Code Playgroud)
我能够用19个变量创建我想要的数据帧,但文件名不存在:
files <- list.files(path="~/Documents/ForR/.", pattern=".txt")
DF <- NULL
for (f in files) {
dat <- read.csv(f, header=F, sep="\t", na.strings="", colClasses="character")
DF <- rbind(DF, dat)
}
Run Code Online (Sandbox Code Playgroud)
如何将文件名(如果可能,不带.txt)作为变量添加到循环中?
添加到循环dat $ file < - unlist(strsplit(f,split =".",fixed = T))[1]
files <- list.files(path="~/Documents/ForR/.", pattern=".txt")
DF <- NULL
for (f in files) {
dat <- read.csv(f, header=F, sep="\t", na.strings="", colClasses="character")
dat$file <- unlist(strsplit(f,split=".",fixed=T))[1]
DF <- rbind(DF, dat)
}
Run Code Online (Sandbox Code Playgroud)
do.call中的row.names不应该是格式名称(列表)[n] .i,其中i是1:number_of_rows_for_data.frame n?所以你可以从row.names中创建一个列
data <- lapply(myFiles, read.table, sep="\t", header=FALSE)
combined.data <- do.call(rbind, data)
combined.data$file_origin <- row.names(combined.data)
Run Code Online (Sandbox Code Playgroud)