所以,我下载了一个包含900个txt文件的数据集,每个生物样本一个。我想要做的是将所有这些数据合并到R中的一个数据矩阵中。
txt_files = list.files()
# read txt files into a list
for (i in length(txt_files)){
x <- read.table(file=txt_files[i], sep="\t", header=TRUE, row.name=1)
}
所有文件都在一个文件夹中,因此我使用list.files()
来查询所有文件名。然后我想将每个表读入一个单独的R对象(在本例中称为x)。问题是我想在实际文件的名称之后命名每个对象而不是x。
我尝试了几件事并尝试搜索互联网,但尚未找到解决方案。 我找到的一件事是使用lapply将它们全部导入数据列表。
data_list = lapply(txt_files, read.table, sep = "\t")
但是,我不认为这对我来说是合适的,因为此后数据矩阵不再可用。我希望有一个人可以帮助我。
答案 0 :(得分:6)
命名连接(尤其是顺序)事物通常是一件坏事。接下来你要做的就是遍历这些东西,这意味着通过将位粘贴在一起来构造名称。一团糟。
尽可能将内容存储在列表中。你做到了。我创建了一些CSV文件:
> txt_files=c("f1.txt","f2.txt","f3.txt","f4.txt","f5.txt")
> data_list = lapply(txt_files, read.table, sep = ",")
> data_list[[1]]
V1 V2 V3
1 1 2 3
> data_list[[3]]
V1 V2 V3
1 1 2 3
2 5 4 3
3 1 2 3
现在我可以使用for(i in 1:length(txt_files))
循环播放它们,并使用txt_files[i]
获取文件的名称,依此类推:
> for(i in 1:length(txt_files)){
+ cat("File is ",txt_files[i],"\n")
+ print(summary(data_list[[i]]))
+ }
File is f1.txt
V1 V2 V3
Min. :1 Min. :2 Min. :3
1st Qu.:1 1st Qu.:2 1st Qu.:3
Median :1 Median :2 Median :3
Mean :1 Mean :2 Mean :3
3rd Qu.:1 3rd Qu.:2 3rd Qu.:3
Max. :1 Max. :2 Max. :3
File is f2.txt
V1 V2 V3
Min. :1 Min. :2 Min. :3
1st Qu.:1 1st Qu.:2 1st Qu.:3
Median :1 Median :2 Median :3
Mean :1 Mean :2 Mean :3
3rd Qu.:1 3rd Qu.:2 3rd Qu.:3
Max. :1 Max. :2 Max. :3
...
[等]
答案 1 :(得分:3)
您可以这样做:
names(data_list) <- txt_files
或者也许:
names(data_list) <- basename(txt_files)
或者可以使用sapply
代替lapply
。
答案 2 :(得分:1)
如果没有看到您的数据,可能会按以下方式应用assign
:
txt_files = list.files()
# read txt files into a list
for (i in length(txt_files)){
x <- read.table(file=txt_files[i], sep="\t", header=TRUE, row.name=1)
assign(paste(txt_files[i], "name", sep="."), x)
}
您也可以使用get
回调每个创建的对象:
x <- get(paste(txt_files[i], "name", sep="."))