2016-12-19 8 views
0

これは私の質問を説明するために作成した単純化されたデータセットです。(R)複数の他の列を計算するためにif()文を使用してデータフレームの列を参照しようとしています

data

こんにちはすべて、私は、データフレームDatabaseで列を参照しようとしています。私の目標は、例えばWeight列を参照できるようにすることであり、その列にはRiskOverweightの列が設定されます。ここで私は(他の失敗したコードと一緒に)しようとしているものです:

ifelse(Database[,"Weight"] >190, Database$Risk="HIGH", Database$Risk="LOW") 

Error: unexpected '=' in "ifelse(Database[,"Weight"] >190, Database$Risk=" 

私もif()コマンドを使用してコードのグループをやって試してみました。

if(Database$Weight > 190) {Database$Risk="HIGH"; Database$Overweight="YES"} 

Error in if (Database$Weight > 190) { : 
missing value where TRUE/FALSE needed 
In addition: Warning messages: 
1: In Ops.factor(Database$Weight, 190) : ‘>’ not meaningful for factors 
2: In if (Database$Weight > 190) { : 
the condition has length > 1 and only the first element will be used 

...明らかに正しくはありません。このコードの理想的な出力はこのようになり

The desired dataframe.

+2

'Database $ Risk = ifelse(データベース$ Weight> 190、" HIGH "、" LOW ")' – HubertL

+0

これは機能しました! ...しかし、私はフォローアップエラーに遭遇しました: Ops.factor(Database $ Weight、190)で: '>'は意味がありませんファクタ だから私は 'データベース$重量< - as.numeric $ Weight) 'はこれを修正しますが、すべての重み値を' c(1,2,3) 'にしました。 元の重量値を取得して数値の列にするにはどうすればよいですか? – user5827247

+2

データの画像を投稿しないでください。 'dput(my_data)'の結果を貼り付けます。 [Info。](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example#5963610) – alistaire

答えて

0

を私たちはここでdata.table

library(data.table) 
setDT(Database)[, Risk := "LOW"][Weight > 190, Risk := "HIGH"] 
0

を使用して場所の割り当てにしてifelseを避けることができdplyrソリューションです。私はOverweightもまたWeightに基づいて分類されていると仮定しています。必要に応じて条件を変更することができます。

library(dplyr) 
df %>% 
    mutate(Risk=ifelse(Weight>190,"HIGH","LOW"), 
     Overweight=ifelse(Weight>190,"YES","NO")) 
関連する問題