2016-09-21 6 views
1

データフレームに新しい列を作成できます。その値は、事前定義された条件文のリストによって決まります。これの最終目標は、各インスタンスに対して条件が満たされているかどうかを表す表のバイナリ値に到達することです。それは不器用または奇妙な出力のように見えるかもしれませんが、それは私が構築しようとしている経済モデルの要件です(繰り返し販売モデル)。ここで一連のTrue/False条件に基づいてバイナリ値の列を動的に作成

はかなり簡略化され、再現例です。

df <- data.frame(a=c(1,2,3,4,5),b=c(0.3,0.2,0.5,0.3,0.7)) 
conditions <- data.frame(y=df$b>=0.5, z=df$b>=0.7) 
columns <- c("y","z") 
for(i in length(columns)){ 
    df[, paste("var_",columns[i],sep="")] <- ifelse(conditions[i],1,0) 
} 

したがって、この例では、私は条件の基準はyの場合は代表またはバイナリ値を持つ列「var_y」と「var_z」を取得したいのですがzが満たされている。

は今、私はこのエラーを取得しています:データフレーム内のすべての情報として、

Error in ifelse(conditions[i], 1, 0) : (list) object cannot be coerced to type 'logical'

私は理解していない「条件は、」「論理的」タイプです。

答えて

1

私達はちょうど

df[paste0("var_", seq_along(columns))] <- +(conditions) 
df 
# a b var_1 var_2 
#1 1 0.3  0  0 
#2 2 0.2  0  0 
#3 3 0.5  1  0 
#4 4 0.3  0  0 
#5 5 0.7  1  1 
+0

ありがとう行うことができます!私自身の参照のために、この行の "+(...)"部分は何と呼ばれていますか?その関数の名前はありますか? – Geogrammer

+0

@Geoprorammerこれは、論理データセットをバイナリに強制することです。標準的なアプローチは 'df [paste0(" var_ "、seq_along(columns))] < - lapply(条件、as.integer)' – akrun

関連する問題