将多个文件读入单独的数据帧并处理每个数据帧

时间:2013-11-12 12:22:48

标签: r dataframe multiple-columns

对于一个目录中的所有文件,我想将每个文件读入数据框然后处理该文件,例如,跨列计算cor。例如:

files<-list.files(path=".") <br>
names <- substr(files,18,20)

for(i in c(1:length(names))){
     name <- names[i]    
     assign (name, read.table(files[i]))
     sapply(3:ncol(name), function(y) cor(name[, 2], name[, y], ))      
}

但是'name'是代码最后一个语句中的一个字符串,我该如何处理数据框'name'?

2 个答案:

答案 0 :(得分:3)

这正是R的列表所针对的。同时调用sapply以获取所有相关性是不必要的,因为cor返回相关矩阵,因此您只需要子集

R> files <- list.files(pattern = "tsv")
R> dat <- lapply(files, read.table)
R> dat
[[1]]
          a        b  c
1  2.802164 4.835557  6
2  1.680186 4.974198  3
3  3.002777 4.670041  6
4  2.182691 5.137982 11
5  4.206979 5.170269  5
6  1.307195 4.753041  9
7  2.919497 4.657171  7
8  2.938614 5.305558  9
9  2.575200 4.893604  2
10 1.548161 4.871108  4

[[2]]
            a b  c
1  -1.8483890 2  6
2  -2.9035164 0  7
3  -0.6490283 1  6
4  -2.8842633 3  2
5  -1.8803775 0 12
6  -3.0267870 1  9
7   0.5287124 0  7
8  -3.7220733 0  2
9  -2.0663912 2  9
10 -1.6232248 1  6

然后,您可以lapply再次对此list进行处理,或将其作为一个班轮进行处理。

R> dat <- lapply(files, function(x) cor(read.table(x))[1,-1] )
R> dat
[[1]]
          b           c 
 0.27236143 -0.04973541 

[[2]]
         b          c 
-0.1440812  0.2771511 

答案 1 :(得分:0)

执行此操作的方法是将您要读取的所有文件放在一个文件夹中,然后使用列表:

your.dir <- ""  # adjust
files <- list.files(your.dir)

your.dfs <- lapply(file.path(your.dir, files), read.table)

your.dfs现在是一个包含所有数据框的列表。您可以使用lapply同时对所有数据帧执行功能,也可以使用通常的子集化语法访问各个数据帧,例如your.dfs[[1]]以访问第一个数据帧。