12

代码片段:

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$bc(1, "ZZZ", 3)?数字从何而来?

4

1 回答 1

13

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

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

看看str(blarg)上面代码的步骤。

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

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

或者更好的是,如果您想替换blarg$athat are的级别'bb',您可以完全消除该ifelse语句:

levels(blarg$a)[levels(blarg$a)=='bb'] <- 'ZZZ'
于 2012-05-25T21:55:06.253 回答