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

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

为了扩展 Ben 所说的内容,因子在内部存储为整数,因此当您执行此类操作时,R 不会以您期望的方式处理它。

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

您可以使用 stringsAsFactors=FALSE正如本建议的那样,或者利用这个因素:

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

或者更好的是,如果您想替换 blarg$a 的级别是 'bb' ,您可以消除 ifelse声明全文:
levels(blarg$a)[levels(blarg$a)=='bb'] <- 'ZZZ'

关于r - R 的 ifelse 如何处理字符数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10761686/

相关文章:

r - 计算 R data.table 中多个概率的分位数,一起计算多列

r - 将列值转换为它们自己的二进制编码列(虚拟变量)

regex - 用操纵模式替换多个模式

r - 创建一个列,告诉哪些其他列具有 NA 值

r - 如何在 R 中禁用 source() 文件回显?

python - rpy2 无法导入 'rgl' R 包

r - 尝试在 R 中运行 lmer() 时出错

r - ggplot2 中标签使用 bquote() 和 expression(paste()) 的区别

r - 如何使用 future.callr 抑制随机数生成警告?

rJava 安装在 macOS 10.14 上失败