R的ifelse如何处理字符数据?

时间:2012-05-25 21:39:05

标签: r

代码片段:

blarg = data.frame(a=c("aa", "bb", "dd"))
blarg$b = blarg$a
# blarg$b is now c("aa", "bb", "dd")
blarg$b = ifelse(blarg$a!="bb",blarg$a,"ZZZ")
# blarg$b is now c(1, "ZZZ", 3)
# I expected c("aa", "ZZZ", "dd")
# typeof(blarg$b) is "character"

为什么blarg $ b c(1,“ZZZ”,3)?这些数字来自哪里?

1 个答案:

答案 0 :(得分:12)

+1使用名为blarg的data.frame。

为了扩展Ben所说的内容,因子在内部存储为整数,所以当你做这样的事情时,R不能按照你期望的方式处理它。

在上面代码的步骤中查看str(blarg)

您可以使用Ben建议的stringsAsFactors=FALSE,也可以使用因素:

ifelse(blarg$a!='bb', levels(blarg$a), 'ZZZ')

或者更好的是,如果您想要替换blarg$a的{​​{1}}级别,您可以完全取消'bb'语句:

ifelse