尝试有条件地应用值时ifelse语句出错

时间:2016-12-16 20:07:59

标签: r

我有以下数据框:

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

如果df $ a中的值为&#34; OK&#34;,我希望该值为df $ b中的任何值。

如果df $ a中的值不是&#34; OK&#34;,我希望它保留。

所以,理想情况下,在这种情况下,df $ a将变为:1,2,2,3,5

我尝试使用以下ifelse语句,但得到错误&#34;条件有长度&gt; 1,只使用第一个元素&#34;。

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

结果,df $ a只是变成了df $ b而且else语句没有被评估。我确定这是一个简单的修复,但不确定我哪里出错了。谢谢你的帮助!

1 个答案:

答案 0 :(得分: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))