在 str_detect 中使用相同的变量并进行变异

Using the same variable within str_detect and mutate

我有一个变量 time_col 如果它以分钟为单位(例如 20 分钟)则包含单词 'minutes',如果以小时为单位则只包含一个数字(例如 2)。我想去掉'minutes'这个词,当观察是以分钟为单位的时候,把它换算成小时。

df <- raw_df %>%
      mutate(time_col = ifelse(str_detect(time_col, "minutes"), time_col/60, time_col))

然而,这给出了一个错误:

'Error: Problem with `mutate()` input `time_col`. x non-numeric argument to binary operator.'

我在使用 ifelse(str_detect(time_col, "minutes"), 1, 0) 时没有这个问题,所以我认为这是因为 str_detect 在转到 ifelse 条件之前替换了 time_col

我该如何解决这个问题?

我创建了一个虚拟数据框来演示。

因为你的time_col是字符,你需要先去掉字符串“minutes”(注意“minutes”前的space),把它改成数字,然后除60.

输入

library(tidyverse)

df <- data.frame(Dummy = letters[1:3], 
                 time_col = c("2", "20 minutes", "30 minutes"))

df
  Dummy   time_col
1     a          2
2     b 20 minutes
3     c 30 minutes

代码和输出

df %>% mutate(time_col = ifelse(
  str_detect(time_col, "minutes"),
  as.numeric(gsub(" minutes", "", time_col)) / 60,
  time_col
))

  Dummy          time_col
1     a                 2
2     b 0.333333333333333
3     c               0.5