【发布时间】:2018-09-14 04:03:24
【问题描述】:
我正在尝试使用dplyr::recode() 和stringr::str_detect() 重新编码字符变量。我意识到这可以通过dplyr::case_when() 来完成,如此处所述:https://community.rstudio.com/t/recoding-using-str-detect/5141,但我相信必须有一种方法可以通过recode() 来实现。
考虑这种情况:
library(tidyverse)
rm(list = ls())
data <- tribble(
~id, ~time,
#--|--|
1, "a",
2, "b",
3, "x"
)
我想通过str_detect() 将数据框中的“x”替换为“c”,这是我的做法:
data %>%
mutate(time = recode(data$time, str_detect(data$time, "x") = "c"))
但这不起作用:
错误:意外的“=”在: “数据%>% 变异(时间=重新编码(数据$时间,str_detect(数据$时间,“x”)=“
显然 R 不知道如何处理最后一个 =,但我相信它必须用于 recode 功能,如下所示:
recode(data$time, "x" = "c")
这会正确执行,就像这样:
str_detect(data$time, "x")
但这不是:
recode(data$time, str_detect(data$time, "x") = "c")
有没有办法让这两个函数相互配合?
【问题讨论】:
-
str_detect返回TRUE或FALSE,而不是您要查找的字符。使用gsub,或者如果您想使用str_detect、case_when或ifelse。 -
这就是问题所在。
recode()不明白如何处理TRUE而不是实际字符,我明白了。