在 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
我有一个变量 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