2017-02-24 2 views
-2

"yy"に値を格納したいのですが、下のコードでは1行しか格納できません(最後の値)。下記の出力をご覧ください。誰かが "yy"にすべての値を保存するのに役立つことができますすべての値がループ内に格納されているわけではありません。

ありがとうございます。私はR.

に初心者です
arrPol <- as.matrix(unique(TN_97_Lau_Cot[,6])) 
arrYear <- as.matrix(unique(TN_97_Lau_Cot[,1])) 

for (ij in length(arrPol)){ 
    for (ik in length(arrYear)) { 
    newPolicy <- subset(TN_97_Lau_Cot, POLICY == as.character(arrPol[ij]) & as.numeric(arrYear[ik])) 
    yy <- newPolicy[which.min(newPolicy$min_dist),] 
    } 
} 

出力:

ここ
YEAR DIVISION STATE COUNTY CROP POLICY STATE_ABB LRPP min_dist 
1: 2016  8 41  97 21 699609  TN 0  2.6 

は "TN_97_Lau_Cot" 行列のイメージです。

enter image description here

+0

:これらは、私はそれを試してみて、どうなる2つの方法があり'yy'にはそれぞれの値が格納されます。つまり' yy [ij、ik] 'です。 –

+0

作業中の変数からサンプルデータをいくつか教えてもらえますか?あなたがしようとしていることに応じて、ベクトル化するか、 'lapply'を使う方法があります。 –

+0

私は同意しますが、各ijには、 "min"が推定されて保存されるべきアウトプットに示されているような複数の行/値があります。 @Oliver。 – user3408139

答えて

0

ループは必要ありません。 の方が簡単ですが、2つのセットベースのステップは2つのループより優れています。あなたが前もって `yy`を作成し、場所を特定する必要があり

ベース

# Perform an aggregate and merge it to your data.frame. 
TN_97_Lau_Cot_Agg <- merge(
    x = TN_97_Lau_Cot, 
    y = aggregate(min_dist ~ YEAR + POLICY, data = TN_97_Lau_Cot, min), 
    by = c("YEAR","POLICY"), 
    all.x = TRUE 
) 

# Subset the values that you want. 
TN_97_Lau_Cot_Final <- unique(subset(TN_97_Lau_Cot_Agg, min_dist.x == min_dist.y)) 

data.table

library(data.table) 

# Convert your data.frame to a data.table. 
TN_97_Lau_Cot <- data.table(TN_97_Lau_Cot) 

# Perform a "window" function that calculates the min value for each year without reducing the rows. 
TN_97_Lau_Cot[, minDistAggregate:=min(min_dist), by = c("YEAR","POLICY")] 

# Find the policy numbers that match the minimum distance for that year. 
TN_97_Lau_Cot_Final <- unique(TN_97_Lau_Cot[min_dist==minDistAggregate, -10, with=FALSE]) 
+0

重複した行を削除したい場合は、 'unique()'を使用してください。 –

+0

ご返信ありがとうございます。しかし、それは私が探していた答えではありません。毎年各ポリシー番号の "min_dist"を知りたい。それが役に立てば幸い。 – user3408139

+0

これは、「あなたは毎年min_distの最小値とそれがもたらしたポリシー番号を期待していますか?」と尋ねたときに言ったことではありませんでした。しかし私は私の元の答えを編集しました。それがあなたが探している答えではない場合は、サンプル出力を作成する必要があります。 –

関連する問題