2013-08-06 66 views
1

我有多个csv文件(超过100个)。每个文件都代表一段时间。在每个文件中,有29行需要滑行(文本行)。在第30行,我有一个温度矩阵作为经度和纬度坐标的函数。例如:在纬度68.80和经度48.40268处,温度是5.94。因此,我想提取每个时间段(每个文件)的纬度和经度坐标的特定组合的温度。R从多重csv文件中提取单个数据

我可以编写单个文件的代码,但我很害怕我不知道如何在循环中或如何使其更快。

任何帮助表示赞赏,谢谢。很抱歉,如果这与其他问题类似,我会阅读我在该主题中找到的内容,但似乎并不适合我的问题。

一个文件中的代码:

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"] 
+3

为FAS的向量/名单在'data.table'包中检查'fread'(但是如果有的话,请注意日期列。它们将作为字符导入)。 –

+0

是每个文件的列名相同还是不同? –

+0

大部分(如果不是全部)都是相同的。我将分别处理它们不同的文件。谢谢。 –

回答

3

相关的数据的大小假设你的系统足够小(相对于您的系统) 到装入内存都在一起,你可以使用列表中的一个镜头做到这一点

## 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与纬度/多头

+0

谢谢,它就像一个魅力!但是,我通过PulledRows < - lapply(AllData,function(DF) DF [8,4])更改了代码的最后一行。我用行号和列号而不是名字。再次感谢! –

相关问题