【发布时间】:2019-10-05 16:56:12
【问题描述】:
我是 R 新手,我在同一文件夹中有很多文本格式的气候数据文件,名称很长,例如“tasmax_SAM-44_ICHEC-EC-EARTH_rcp26_r12i1p1_SMHI-RCA4_v3_day_20060101-20101231.txt”,其中每个术语分开“_”对应于变量、域、机构、场景等特征。 我想要的是一个代码,它允许我选择文件夹中与模型名称、场景名称、gcm 名称同名的所有文件并按行附加它们。
我尝试的是首先创建文件列表并为其名称的每个部分分配变量,例如 model_name、gcm_name 等。 然后创建了一个条件,我通过循环比较文件中的这些变量。
file <- list.files ( pattern = '*.txt' )
group <- function(input){
index = which(file == input)
df=read.table(input,header=FALSE,sep="")
fname= unlist((strsplit(input,"_")),use.names=FALSE)
model_name=fname[3]
sce_name=fname[4]
gcm_name=fname[6]
m=1
for (m in 1:length(file)) {
if (model_name[m]==model_name[m+1] & sce_name[m]==sce_name[m+1] & gcm_name[m]==gcm_name[m+1]) {
data=rbind(df[m],df[m+1])
} else {}
}
}
for (i in 1:length(file)) {
group(file[i])
}
我的代码的错误是这样的:
if (model_name[m] == model_name[m + 1] & sce_name[m] == 中的错误 sce_name[m + : 需要 TRUE/FALSE 的缺失值
最后,代码应该附加满足 if 条件的文件,例如从这两个文件中创建一个文件:
tasmax_SAM-44_ICHEC-EC-EARTH_rcp26_r12i1p1_SMHI-RCA4_v3_day_20060101-20101231.txt
tasmax_SAM-44_ICHEC-EC-EARTH_rcp26_r12i1p1_SMHI-RCA4_v3_day_20110101-20151231.txt
非常欢迎任何帮助和建议!
【问题讨论】:
-
您的 if 条件有误。 [m+1] 的值不存在。这里有一个问题:你只想将文件与第一个读取文件名称的文件结合起来吗?
-
感谢您的帮助,但我没有看到另一种遍历索引的方法,有什么建议吗?
-
是的,我想选择所有同名的文件,从 2006 年到 2100 年。我提交了两个文件名来显示我想如何对它们进行分组。