2016-12-16 189 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))