我有以下数据框:
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语句没有被评估。我确定这是一个简单的修复,但不确定我哪里出错了。谢谢你的帮助!
答案 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))