2016-12-16 191 views
1

我有以下數據框:誤差ifelse語句

a <- c("OK", "OK", "2", "3", "5") 
b <- c(1, 2, 3, 4, 5) 
df <- data.frame(a, b) 

如果DF $ a的值是「OK」,我想價值是無論是在DF $ B 。

如果df $ a中的值不是「OK」,我希望它保持不變。

所以,最好是在這種情況下,DF $一個將成爲:1,2,2,3,5

我試着用下面的ifelse語句,但得到的錯誤「狀態具有長度> 1只有第一個元素將被使用「。

if(df$a == "OK") { 
    df$a <- df$b 
} else { 
    df$a <- df$a 
} 

因此,df $ a只是變成了df $ b,else語句沒有被評估。我相信這是一個簡單的修復,但不知道我哪裏出錯了。謝謝你的幫助!

回答

1

實際上內部存儲的整數正在被替換。 (因子變量的水平在內部作爲整數存儲)

> str(df) 
'data.frame': 5 obs. of 2 variables: 
$ a: Factor w/ 4 levels "2","3","5","OK": 4 4 1 2 3 
$ b: num 1 2 3 4 5 

# convert the factor to character first 
df$a <- as.character(df$a) 
ifelse(df$a == "OK", df$b, df$a) 
# OR 
ifelse(df$a == "OK", df$b, as.character(df$a))