2016-09-21 27 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) 
} 
在這種情況下

所以,我想獲得具有代表二進制值列「var_y」和「var_z」如果標準條件y或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(conditions,as.integer)' – akrun

相關問題