R извлечь отдельные данные из нескольких CSV-файлов

У меня есть несколько файлов csv (более 100). Каждый файл представляет период времени. В каждом файле есть 29 строк, которые нужно пропустить (текстовые строки). В строке 30 у меня есть матрица температуры как функция координат широты и долготы. Например: на широте 68,80 и долготе 48,40268 температура 5,94.

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

Я могу написать код для одного файла, но боюсь, я не знаю, как сделать это в цикле или как сделать это быстрее.

Любая помощь приветствуется, спасибо. Извините, если это похоже на другие вопросы, я прочитал все, что мог найти по этой теме, но это не подходит для моей проблемы.

Код для одного файла:

filenames <- list.files(path="E:/Documents...")
fileone <- read.csv(filenames[1], skip=29, header=T, sep=";")
names(fileone) <- c("Lat", "68.88", "68.86", "68.85", "68.83", "68.82", "68.80", "68.79", "68.77", "68.76", "68.74", "68.73", "68.71")
Tempone <- fileone[which(fileone$Lat==48.40268), "68.80"]

person J.VDW    schedule 06.08.2013    source источник
comment
для более быстрой проверки проверьте fread в пакете data.table (но будьте осторожны со столбцами даты, если они у вас есть. Они будут импортированы как символы).   -  person Ricardo Saporta    schedule 06.08.2013
comment
имена столбцов каждого файла одинаковы или разные?   -  person Ricardo Saporta    schedule 06.08.2013
comment
Большинство, если не все, одинаковы. С файлами, где они отличаются, я разберусь отдельно. Спасибо.   -  person J.VDW    schedule 06.08.2013


Ответы (1)


Предполагая, что размер данных относительно вашей системы достаточно мал (относительно вашей системы), чтобы все вместе поместиться в память, вы можете сделать это за один раз, используя списки.

## Grab the filienames, just like you're doing
filenames <- list.files(path="E:/Documents...")

## Assuming all columns have the same column names
c.nms <- c("Lat", "68.88", "68.86", "68.85", "68.83", "68.82", "68.80", "68.79", "68.77", "68.76", "68.74", "68.73", "68.71")


## Import them all in one shot, as a list of data.frames
AllData <- lapply(filenames, read.table, 
      skip=29, header=TRUE, sep=";", row.names=NULL, col.names=c.nms)

## Then to get all of your rows
PulledRows <- 
lapply(AllData, function(DF) 
    DF[fileone$Lat==48.40268, "68.80"]
  )

Если вы извлекаете разные значения широты/долготы для каждого файла, вы можете использовать mapply с вектором/списком широты/долготы.

person Ricardo Saporta    schedule 06.08.2013
comment
Спасибо, это работает как шарм! Однако я изменил последнюю строку кода на PulledRows ‹- lapply(AllData, function(DF) DF[8, 4]). Я использовал номера строк и столбцов, а не имена. Спасибо еще раз! - person J.VDW; 06.08.2013