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?
我有这行代码在 "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?