【问题标题】:ifelse works with mutate in R, why not in knitr?ifelse 在 R 中与 mutate 一起工作,为什么不在 knitr 中?
【发布时间】:2015-06-21 09:15:56
【问题描述】:

我有这行代码在“正常”R 中工作:

damage <- damage %>% mutate( EVTYPE = ifelse(grepl("winter", EVTYPE,
    ignore.case=T), "Winter Weather", EVTYPE))

但是,knitr 中完全相同的代码行会导致奇怪的行为。如果 grep 失败,EVTYPE 的值不会被单独保留,而是改为一个数字。也许是一个索引。

head(unique(damage$EVTYPE)) 在 R 中的输出是:

[1]“龙卷风”“TSTM 风”“冰雹”“冰风暴/山洪”
[5]“冬季天气”“飓风蛋白石/强风”

而在 knitr 中是:

[1]“407”“423”“134”“239”
[5] 《冬季天气》《223》

这是一个错误吗?是否有某些原因预计这不会在 knitr 中工作?

【问题讨论】:

  • 看起来在你的 R 环境中它是一个字符向量,而在你的 knitr 环境中它是一个因素。您是否忘记在 read.table 上使用 stringsAsFactors = FALSEdata.frame
  • 就是这样!非常感谢你。把它记下来作为答案,我会选择它。
  • 如果这是原始上下文中的整行代码(我很欣赏它可能会从原始上下文中修改),为什么还要使用%&gt;%damage &lt;- mutate(damage, ...)damage &lt;- damage %&gt;% mutate(...) 工作方式相同,并且更短...
  • @BenBolker 甚至更短(如果使用 magrittr)damage %&lt;&gt;% mutate(EVTYPE = ...)

标签: r knitr dplyr


【解决方案1】:

看起来在您的 R 环境中它是一个字符向量,而在您的 knitr 环境中它是一个因素。您是否忘记在 read.table 或 data.frame 上使用 stringsAsFactors = FALSE?

【讨论】:

    猜你喜欢
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    相关资源
    最近更新 更多