2017-03-29 16 views
0

4列120行からなる.cvsファイルがあります。 私はすべての行を通過しようとしています.3番目の列(ここでは "ダム")に "1"が表示されているところで、その行を "Dam.one"という行列に保存します。ループの出力をベクトルに保存するR

ここ

は、これまでの私のコードです:

DamType = c("Dam.one", "Dam.two", "Dam.three", "NoDam.one", "NoDam.two", "NoDam.three") 

for (i in 1:120) { 
    if (mercury.raw[i,]["Dam"] == 1) { 
     if (mercury.raw[i,]["Type"] == 1){ 
      DamType["Dam.one"] <- mercury.raw[i,] 
}}} 

これは、データセットの最初の6つのエントリです: `

> mercury.raw 
        Lake Mercury Dam Type 
1    ALLEN.P 1.080 1 1 
2   ALLIGATOR.P 0.025 1 1 
3  A.SAGUNTICOOK.L 0.570 0 2 
4  BALCH&STUMP.PONDS 0.770 0 2 
5   BASKAHEGAN.L 0.790 1 2 
6   BAUNEAG.BEG.L 0.750 0 2 

私はDamType["Dam.one"]はと等しくなるようにしたい:

    Lake Mercury Dam Type 
1    ALLEN.P 1.080 1 1 
2   ALLIGATOR.P 0.025 1 1 

私は何が間違っているのか分かりません。 何か助けていただければ幸いです。

+0

私にも分かりません。あなたが得るエラーを説明できますか?おそらく 'mercury.raw'が何であるかを見せてくれるでしょうか? [mcve]を参照してください。 – dash2

+0

@manotheshark何ですか?彼は 'Dam.one'という変数を持っておらず、' 'Dam == 1''は常に' FALSE'に評価されます。 – dash2

+0

@ dash2私は 'mercury.raw'の代わりに' DamType'を間違って入力しました。彼の質問から、彼は3番目のコラム(「ダム」)が「1」を見るごとに探しています。私は彼が1つを持っていない時代があると仮定しているだけで、実際に彼のデータをサブセット化したいと思っています。 – manotheshark

答えて

0

ベクトルをベクトルに格納することはできません。リストには、複数の行列(この場合はデータフレーム)を格納できます。これは、データをサブセット化しようとしているように見え、forループは不要です。

DamType <- list() 
DamType[["Dam.one"]] <- mercury.raw[mercury.raw$Dam == 1 & mercury.raw$Type == 1, ] 

> DamType$Dam.one 
     Lake Mercury Dam Type 
1  ALLEN.P 1.080 1 1 
2 ALLIGATOR.P 0.025 1 1 
+0

ありがとうございます!それは最終的に動作します。 –

0

私は、Rやdplyrなどの一般的なパッケージについてよく知っておくことをお勧めします。

library(dplyr) 
dam_grouped <- mercury.raw %>% group_by(Dam) 
関連する問題