一个代码片段:
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'