我有一个包含大约400个具有相同结构的文件的文件夹。这些文件中的每一个都包含4列,没有标题,对应于4个气候变量。我需要根据文件名在每个文件中包含两个新列。名称的结构是MeteoData_PXCY,其中X = CODE_PLOT,Y = CODE_COUNTRY。一旦我有了这两个新列,我需要读取一个数据集中的所有文件,并按CODE_PLOT
和CODE_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))
答案 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未对其进行测试,但可以在评论中提出问题。