2016-11-07 11 views
0

因子レベルで単純な算術演算をデータフレーム列に対して行うよりもスマートな方法がありますか?異なる値を因子レベルで加算または掛け算

data <- runif(100,0,1) 
df <- data.frame(x = data, 
       class = cut(data, breaks = c(0,0.5,1), labels = c("low", "high"))) 
df$x2 <- ifelse(df$class == "high", df$x - 1, df$x + 1) 

私はいくつかの因子レベルのデータフレームを持っており、異なる値のベクトルで値を加算/乗算したいと考えています。私はおそらくsplitと何かが働くかもしれない何か?

+0

あなたが望むものはあまり明確ではありません – Sotos

答えて

3

のが要因の内部整数表現の使用を作ってみましょう:

df$x2 <- with(df, c(1, -1)[class] + x) 

私は、彼らがRの基本機能にエイリアスされているとして、しかし、変数名としてdfclassを使用することはお勧めしません。 (同じ理由でdataを使用しないでください)

ここにいくつかの説明があります。要因レベルが「低」と「高」のclassがコード化されているため、1と2にマッピングされます。as.integer(df$class)を参照してください。さて、あなたのコードでは、 "低"の場合はxに1を加え、 "高い"の場合はxから1を引いたものになるようにするため、因子レベルに従ってインクリメントベクトルc(1, -1)を送り、xに追加します。

+0

ありがとう、私は将来このような変数に名前を付けることを避けようとしますが、それはとにかくMWEのためのものでした。 これはうまくいくようで、いくつかのラベルにも同様に適用されます。 (df、c(1,0,1)[class] + x)を使用して を使用して –

+0

クール私はあなたが因子の内部整数表現 –

関連する問題