2013-03-14 60 views
0

對於我的數據框的每一行,我想根據從此數據框的列中獲取的數字來計算值。如果計算出的值大於2,我想另一列值設置爲0,否則設置爲1。R依賴於另一個值的設置值

x=(df$firstnumber+df$secondnumer)/2 
if(x>2){ 
df$binaryValue=0} 
else{ df$binaryValue=1} 

,這將引發的錯誤

條件具有長度> 1且僅第一元件將用於

因爲x是一個矢量

我該如何解決這個問題?一種方法是將其作爲函數編寫並應用於數據框 - 還有其他選項嗎?

此外,我怎麼能寫這與appl()?

在此先感謝

回答

3
transform(df, BinaryValue = as.numeric(firstnumber + secondnumber > 4)) 

沒有必要由兩個在分第一名。你可以檢查總和是否大於四。函數as.numeric用於將布爾轉換爲數字(0和1)值。

+0

+1我喜歡這個,它更直接。 – 2013-03-14 13:42:14

4

你可以簡單地做......

df$BinaryValue <- ifelse(x > 2 , 0 , 1) 

所以你...

df <- data.frame(x = 1:5 , y = -2:2) 
x <- df$x + df$y 
df$BinaryValue <- ifelse(x > 2 , 0 , 1) 

df 
#  x y BinaryValue 
# 1 1 -2   1 
# 2 2 -1   1 
# 3 3 0   0 
# 4 4 1   0 
# 5 5 2   0 
+0

它可以簡化爲'df $ BinaryValue < - ifelse(df $ x + df $ y> 2,0,1)'。 – 2013-03-14 13:49:59

+0

@musically_ut是的,你是對的。我只是按照OP使用'x'向量,但你是對的,我應該看看改進它,而不是試圖回答問題 – 2013-03-14 13:52:07

相關問題