2012-03-13 9 views
0

LocIDが3,4,7,8,14の場合、データ$ newConcはデータ$ conc/2に等しい elseデータ$ newConc < - 他のデータ$濃#が同じシンプルであれば文のエラーがRである場合は

data$newConc <- if(data$LocID == c(3,4,7,8,14)) 
data$conc/2 else data$conc 

str(data) 
$ LocID  : int 1 2 3 4 5 6 7 8 9 10 ... 
$ time  : int 1 1 1 1 1 1 1 1 1 1 ... 
$ conc  : num 0.03695 0.0155 0.00738 0.00753 0.01795 ... 

警告CONC保つ: 条件は長さ> 1を持っており、最初の要素だけが、私の知る限り、あなたから伝えることができるよう

+1

あなたが指定したRコードは有効ではありません...バランスのとれた角かっこはありませんか?あなたは 'ifelse'を意味しましたか? –

+0

私の構文を編集しました – Amateur

答えて

5

を使用しますあなたがやろうとしているコード(括弧がないために実行されません):

foreach row in data 
    if row$LocID is one of 3, 4, 7, 8, or 14 
    THEN set row$newConc to row$conc/2 
    ELSE set row$newConc to row$conc 

これを行うには、ifelseを使用します。 ベクトルブールのを返すよう、そしてifが必要です - あなたは値が等しいかどうかテストしたい場合は

また、OT 3、4、7、8または14、そして==を使用していませんsingleブール値なので、エラーです。

どちらか単一 TRUE/FALSEを返すようにdata$locID %in% c(3,4,7,8,14)を使用するか、または単一のブールへのブール値のベクトルをオンにするany(data$locID == c(3,4,7,8,14))を使用します。

あなたはベクトルにスカラーを比較している、ので、あなたの出力がありますベクトル。 ifステートメントは、単一のブール値(ブール値のベクトルではありません)だけを取ります。

どちらか単一 TRUE/FALSEを返す、または単一のブールへのブール値のベクトルをオンにするany(data$locID == c(3,4,7,8,14))を使用するdata$locID %in% c(3,4,7,8,14)を使用します。

data$newConc <- ifelse(data$locID %in% c(3,4,7,8,14), 
         data$conc/2, 
         data$conc) 

代わりに私がifelse(any(data$locID == c(3,4,7,8,14)), ...)を使用することもできました。

関連する問題