2012-03-13 18 views
0

温度データ(dtT)と相対湿度(dtR)の2つのExcelデータがあります。各フレームは、39行(監視サイト)×64列(121日から181日までの61日間、「lat」、「lon」、および「county」)です。両方のシートは全く同じ順序です。私は、これらの2つのデータセットを使用して、毎日の各監視サイトの「熱指標」を計算し、同じ次元の別のデータフレームを埋めていきたいと考えています。R:ループを使用して異なるデータセットの2つの変数を使用して式を適用する

問題:ネストされたループを使用しようとしていますが、すべての値が0に戻ります。 「郡」列に単語が含まれているため、Rはすべての数字を文字として読み取っているため、計算を実行できません。 (**指定された列は、ここに混乱見えるかもしれませんが、私は一般的な戦略を探しています)

dtT <- read.csv("C:/Users/Desktop/Tavg3.csv") 
dtR <- read.csv("C:/Users/Desktop/RHavg3.csv")  
# Make a new data frame 
hi = cbind(dtT, dtR) 
# Add empty columns for heat index 
hi[paste("hi",121:181,sep="")] = 0 
# Loop to fill each hi cell using NOAA formula 
for(i in 1:length(hi$lat)){ 
    t <- hi[i, 3:63] 
    r <- hi[i, 64:124] 
    h <- hi[i, 125:185] 
    for(j in 1:length(t)){ 
     h[i,j] = -42.379 + (2.04901523*t[j]) + (10.14333127*r[j]) - (0.22475541*t[j]*r[j]) - 
       ((6.83783*10^-3)*(t[j]^2)) - ((5.481717*10^-2)*(r[j]^2)) + ((1.22874*10^3) - (t[j]^2)*r[j]) + ((8.5282*10^-4)*t[j]*(r[j]^2)) - ((1.99*10^-6)*(t[j]^2)*(r[j]^2)) 
    } 
} 
hi[1:10, 130:140] 
hi = hi[,c(1:2, 125:185] 
+1

「郡」の欄最小限の例を投稿しない場合は、質問の意味を理解するために、少なくとも 'dtT 'と' dtR 'の' str() '出力を十分に投稿してください。 –

+0

私の謝罪 - 私は不必要な情報を除外していると思っていたが、私は今、私が全体像を与えていないことを知る。コメントありがとう。 – mEvans

答えて

1

をあなたのコードでは、あなたがh[i,j]を更新するが、その後、あなたはh一見のための後のように何... hiを見て-ループ? hを変更するとがdata.framesが正確に持っている場合は、概念的hhi ...

のサブセットであるにもかかわらず、あなたはおそらくちょうどhi[i,j+124] =

+0

これが修正されました - ありがとう!私は違いの微妙なことを理解していませんでしたh/h:) – mEvans

+0

hi [i、j + 124]について...なぜ124ですか?各セットに61日がある場合、それは離れて122だけ離れていないのですか? – mEvans

+0

さて、こんにちは、hから列125を引き出しました。私は1から始まるので、124 + 1は125です... – Tommy

2

h[i,j] =を置き換えることができhiを変更しないことを

注意 数値を行列として抽出して とし、それら2つの行列の計算を行うことができます。

temperature <- as.matrix(dtT[,4:64]) # Use the correct column numbers 
humidity <- as.matrix(dtR[,4:64]) 
heat_index <- 
    -42.379 + 
    2.04901523 * temperature + 
    10.14333127 * humidity - 
    0.22475541 * temperature * humidity - 
    6.83783e-3 * temperature^2 - 
    5.481717e-2 * humidity^2 + 
    1.22874e3 * temperature^2 * humidity + 
    8.5282e-4 * temperature * humidity^2 - 
    1.99e-6  * temperature^2 * humidity^2 
# Put back the latitude, longitude, county columns 
# (assuming they were the first three) 
cbind(dtT[,1:3], heat_index) 
+0

うわー、私はこの解決策が大好きです - ありがとう!それは本当に非常にきれいに式を描いています。私はこれと、@ Tommyによって与えられた編集を実行し、結果をクロスチェックします。 – mEvans

関連する問題