我有一個名為 "HUCs "的檔案夾,里面有2100個檔案,每個檔案都用一個縮寫和一個數字命名。每個檔案中都有三列資料,長度相同,標題也相同。我有另一個名為 "手段 "的檔案,有2100個行。每個行對應于HUCs檔案夾中的一個檔案,并被相應命名。
例如,"手段 "中的A2行包含 "1010001"(其名稱),而B2包含手段資料。1010001 "行資料對應于 HUCs 檔案夾中一個名為 "mricgcm_1010001 "的檔案。
我需要以某種方式從 "平均值 "檔案中逐一復制每一行,并將資料(該行的三個單元格)放入其對應的檔案中的新列范圍。因此,HUCs檔案中的當前資料在A/B/C列中,而新的 "平均值 "資料可以放在D/E/F列中(或一些分隔的等價物)。
如果只有2100個檔案的一個檔案夾,我會考慮用手來做。但是我有幾個類似的檔案夾。我甚至都不知道該如何去做。這在R中可能嗎?我已經盡力了,但如果需要進一步解釋,請提問。
這是HUC檔案串列的開頭:
mricgcm_1010002.csv
mricgcm_1010003.csv
mricgcm_1030001.csv
mricgcm_1040001.csv
mricgcm_1040002.csv
秦海璐_1050001.csv
mricgcm_1050002.csv
秦海璐_1070002.csv
秦海璐_1080107.csv
秦海璐_1080204.csv
鄧麗君_1090003.csv
秦海璐_1100001.csv
mricgcm_1100002.csv
mricgcm_1100003.csv
mricgcm_1200001.csv
這是 "手段 "檔案中的作業表:
HUC手段
1010002 141.0727273
1010003 148.6072727[/span
1030001 158.3327273[/span
1040001 181.1127273[/span
1040002 222.78
1050001 163.4818182[/span
1050002 231.92727[/span
1070002 201.5018182[/span
1080107 183.0545455[/span
1080204 197.3836364[/span].
1090003 209.14[/span
1100001 193.0472727[/span
1100002 186.1963636[/span
1100003 199.2854545[/span
1200001 1.021818182[/span
這就是現在的HUCs檔案包含的內容:
HUC年份預測
mricgcm_1010002 1961 10.8
mricgcm_1010002 1962年 4.6
mricgcm_1010002 1963 0.8
mricgcm_1010002 1964 66.3
mricgcm_1010002 1965 20.4
mricgcm_1010002 1966 8.5 8.5
mricgcm_1010002 1967 13.
mricgcm_1010002 1968 3.
mricgcm_1010002 1969 59.2
mricgcm_1010002 1970 13.8
mricgcm_1010002 1971 5.5
mricgcm_1010002 1972 1.9
mricgcm_1010002 1973 9.9
mricgcm_1010002 1974 11.7
mricgcm_1010002 1975年 52.4
而這是我想要的結果的例子,對于每個檔案:
這是我想要的結果的例子。
HUC年份預測的HUC平均值
mricgcm_1010002 1961 10.8 1010002 141.0727273
mricgcm_1010002 1962 4.6 141.0727273[/span
mricgcm_1010002 1963 0.8 141.0727273[/span
mricgcm_1010002 1964 66.3 141.0727273[/span
mricgcm_1010002 1965 20.4 141.0727273[/span
mricgcm_1010002 1966 8.5 141.0727273[/span
mricgcm_1010002 1967 13.5 141.0727273[/span
mricgcm_1010002 1968 3.7 141.0727273[/span
mricgcm_1010002 1969 59.2 141.0727273[/span
mricgcm_1010002 1970 13.8 141.0727273[/span
mricgcm_1010002 1971 5.5 141.0727273[/span
mricgcm_1010002 1972 1.9 141.0727273[/span
mricgcm_1010002 1973 9.9 141.0727273[/span
mricgcm_1010002 1974 11.7 141.0727273[/span
mricgcm_1010002 1975 52.4 141.0727273[/span
注意,FTR:平均值不是預測資料列的平均值,否則我可以直接對該列運行一個平均值公式。它是歷史資料的平均值,從其他地方得到的。
這就是我現在得到的結果:
指定 HUC YEAR RO_MM HIST HUC Historic Mean D
mricgcm 1010004 1961 71.8
mricgcm 1010004 1962 119
mricgcm 1010004 1963 177.7
mricgcm 1010004 1964 166
mricgcm 1010004 1965 159
mricgcm 1010004 1966 180.3
因此,有事發生,但沒有資料。
uj5u.com熱心網友回復:
這里是我的解決方案。 目錄的結構是
。
├── copy_means_to_FUCs.R
├───HUCs
│ └── mricgcm_1010001.csv
│ └── mricgcm_1010002.csv
└── means.csv
然后代碼被組織為
library(data.table)
# install.packages("qpcR")
means <- fread("means.csv")
means$HUC <- as. character(means$HUC)
# get all file's name
fn <- list.files(" . /HUCs",/span>pattern="*. csv",full.names= TRUE)
f_paste <- function(x){>
csv <- fread(x)
num <- gsub(" .*_(.*). csv","1",x)
tmp < - cbind(csv,means[num == HUC。 ]) # 按名稱匹配行,然后將它們系結#tmp <- qpcR::cbind.na(csv, means[num == HUC,])
fwrite(tmp, x)
invisible(return(NULL))
}
invisible(lapply(fn, f_paste)) # 注意。運行一次就夠了
不完美的地方在于,由于cbind的原因,來自means的行被填充到所有行中。我認為這不是要解決的核心問題。
( 你可以用qpcR::cbind.na(csv, means[num == HUC,])代替cbind來解決這個問題)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/328372.html
標籤:
