Импорт нескольких файлов и их индексация - PullRequest
1 голос
/ 20 октября 2011

У меня есть n файлов, file_1, file_2, ..., file_n, которые я хочу импортировать и работать с ними. Поэтому я импортирую файлы, как это

files <- list.files(pattern=".txt$") 
for(i in files) { 
    x <- read.table(i, header=TRUE, comment.char = "A", sep="\t")
    assign(i, x)
}

Дело в том, что я хочу использовать данные одновременно из разных файлов. Например, я хочу вычислить вектор средних значений первого столбца каждого файла:

 meanv = mean(file_1$firstcolumn, file_2$firstcolumn, ..., file_n$firstcolumn).

Самый логичный способ сделать это - записать цикл, проходящий через все файлы (file_1, file_2, ..., file_n). В этом случае вам нужно проиндексировать файлы. Есть ли какое-то решение этого? Или есть другое решение?

Ответы [ 2 ]

1 голос
/ 20 октября 2011

Вот подход

# list files with .txt extension
files  <- list.files(pattern = '\\.txt$')

# read files into a list of tables
tables <- lapply(files, read.table, header = TRUE, comment = 'A', sep = '\t')

# compute mean of first column
meanv <- lapply(tables, colMeans) 
1 голос
/ 20 октября 2011

Просто используйте список:

##Generate some test data
R> dd1 = data.frame(V1 = rnorm(10), V2 = rnorm(10))
R> dd2 = data.frame(V1 = rnorm(10), V2 = rnorm(10))
#Create an empty list
R> l = list()
##In your example, you would have something like:
##l[[i]] = read.table(....)
R> l[[1]] = dd1; l[[2]] = dd2

##Now use lapply to calculate the column means for each data frame
R> lapply(l, colMeans)
[[1]]
     V1      V2 
-0.6805 -0.0767 

[[2]]
      V1       V2 
0.253563 0.006207 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...