R:读取多个文件并根据文件名标记它们

时间:2015-03-12 08:05:36

标签: r

我有一个包含大约400个具有相同结构的文件的文件夹。这些文件中的每一个都包含4列,没有标题,对应于4个气候变量。我需要根据文件名在每个文件中包含两个新列。名称的结构是MeteoData_PXCY,其中X = CODE_PLOT,Y = CODE_COUNTRY。一旦我有了这两个新列,我需要读取一个数据集中的所有文件,并按CODE_PLOTCODE_COUNTRY聚合分组以计算平均值。因此,最终输出为400行,每行CODE_PLOT一行,CODE_COUNTRY

示例文件MeteoData_P1C1.csv

32509   33.91   2.9155  4494.5  13.46
32540   63.03   3.9718  6520.8  25.12
32568   71.68   8.7874  11587   58.67
32599   116.38  7.8683  13286   62.58
32629   31.12   16.097  23555   135.35
32660   56.56   16.481  21886   130.24
32690   68.59   19.737  21677   141.15
32721   55.55   18.755  18830   117.39
32752   59.88   15.598  13579   81.06
32782   43.43   12.361  8622.2  54.57

示例MeteoData_P109C19.csv

32509   18.17   -0.70355    1413.5  9.93
32540   78  -0.43607    3574.6  10.46
32568   74.43   0.38645 7478.5  22.53
32599   73.19   2.5743  12352   42.85
32629   36.75   9.4852  21244   105.57
32660   61.65   13.753  21586   117.3
32690   86.16   15.991  20452   127.89
32721   98.02   12.713  13981   76.73
32752   32.14   9.9547  10850   53.13
32782   53.46   4.4252  5041.7  21.46

在最终输出中我应该有这个结构(没有“;”):

Date; Precip; Temp; Rad; Pet; CODE_PLOT; CODE_COUNTRY
32540; 63.03; 3.9718; 6520.8; 25.12; 1; 1
32568; 71.68; 8.7874; 11587; 58.67; 9; 19

目前,我有:

setwd("MeteoData”) # Folder in which all the files are into
filenames <- list.files(pattern=".csv")
clim <- lapply(filenames, function(x) read.csv(file=x, header=FALSE))

1 个答案:

答案 0 :(得分:2)

您可以将所有文件放在新的文件夹/目录中,然后使用list.files创建一个循环:

all.dfs <- list()
for(filename in list.files("some_dir")) {
   all.dfs[[length(all.dfs) + 1]] <- read.table(filename, ...) 
   # put in read.table call the appropriate arguments, including column names for the existing data in the files
   all.dfs[[length(all.dfs)]]$CODE_PLOT <- sub(".*P(\\d*)C(\\d*)\\.csv", "\\1", filename)
   all.dfs[[length(all.dfs)]]$CODE_COUNTRY <- sub(".*P(\\d*)C(\\d*)\\.csv", "\\2", filename)
}

然后将所有内容合并到一个数据帧中......

big.df <- do.call(rbind, all.dfs)

Haven未对其进行测试,但可以在评论中提出问题。