ifelse 在 R 中使用 mutate,为什么不在 knitr 中使用?

ifelse works with mutate in R, why not in knitr?

我有这行代码在 "normal" R:

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

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

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

[1] "TORNADO" "TSTM WIND" "HAIL" "ICE STORM/FLASH FLOOD"
[5] "Winter Weather" "HURRICANE OPAL/HIGH WINDS"

而在 knitr 中是:

[1] "407" "423" "134" "239"
[5] "Winter Weather" "223"

这是一个错误吗?这在 knitr 中不起作用有什么原因吗?

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