一个代码片段:

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用于使用名为blarg的data.frame。

为了进一步解释Ben所说的,因数在内部存储为整数,因此当您执行此类操作时,R无法按照您期望的方式进行处理。

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

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

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


或者更好的是,如果要替换blarg$a'bb'级别,可以完全消除ifelse语句:

levels(blarg$a)[levels(blarg$a)=='bb'] <- 'ZZZ'

08-19 21:08