在同一个表中读取R中的多个文件,作为不同的变量
问题描述:
我有100个文件,每个文件名为rundataX,其中x是数字。我想在R中读一个名为mydata的表。每个rundata文件有3列:tmX
,scoreX
和currentX
。我可以在一个文件中这样写着:在同一个表中读取R中的多个文件,作为不同的变量
mydata = read.table("rundata1", sep= " ",
col.names=c("tm1","score1","current1"))
如果我在未来的文件中读取,它前面的两个变量似乎消失:
mydata = read.table("rundata2", sep= " ",
col.names=c("tm2","score2","current2"))
有一些选项,让我“追加”列(从而变量)。请注意,它们都具有不同的长度(行数)。我在这里找到的大多数帖子都是用于分割行的多个文件,而不是列。
答
这里的方式与list.files
和lapply
:
filenames <- list.files(pattern = "^rundata\\d+$")
dat <- do.call(rbind, lapply(filenames, read.table, sep = " ",
col.names = c("tm", "score", "current")))
在代码中,你每次使用read.table
时间覆盖mydata
。
答
如果你不介意使用一个循环,你可以尝试:
file.names <- paste("rundata", 1:100, sep= "")
tm.names <- paste("tm", 1:100, sep= "")
score.names <- paste("score", 1:100, sep= "")
current.names <- paste("current", 1:100, sep= "")
my.data.list <- list()
for(i in 1:100){
my.data.list[[i]] <- read.table(file.names[i], sep= " ",
col.names=c(tm.names[i], score.names[i],
current.names[i]) )
}
my.data <- do.call(cbind, my.data.list)
rm(my.data.list, file.names, tm.names, score.names, current.names)