在 grepl 字符串中使用多个表达式来创建新数据
Use multiple expression in grepl string to create new data
我想根据数据框中另一列中的字符串创建一个新列。使用 case_when
和 grepl
如果字符串包含 value1
或 value2
,我想创建一个新的 class。但是,不确定如何放置此 'OR' 语句?
虚拟示例(不起作用):
df <- data.frame(type = "a_m5", "a_m20", "a_5")
df %>%
mutate(modif = case_when(
grepl('_m5'|'_m20', type) ~ 'less', # how to specify here | OR symbol in R?
grepl('_5', type) ~ 'more'))
当然,如果我一一指定语句就可以了(工作):
df %>%
mutate(modif = case_when(
grepl('_m5', type) ~ 'less',
grepl('_m20', type) ~ 'less',
grepl('_5', type) ~ 'more'))
但是我想知道如何把它写成一行,因为我有多个选项?也许像 chars %in% vector
这样的东西可以在这里工作?
期望的输出:
type modif
1 a_m5 less
2 a_m20 less
3 a_5 more
您可以在此处使用 %in%
:
df %>%
mutate(modif = case_when(
type %in% c('_m5', '_m20') ~ 'less',
TRUE ~ 'more')
)
您还可以在每个谓词的 LHS 上保留一个值,以保持一致:
df %>%
mutate(modif = case_when(
'_m5' ~ 'less',
'_m20' ~ 'less',
TRUE ~ 'more')
)
请注意,我不会显式检查 _5
值,假设它是唯一的其他可能值。
我相信您可以将 |
放入您的 grepl 正则表达式中:
df <- data.frame(type = c("a_m5", "a_m20", "a_5"))
df %>%
mutate(modif = case_when(
grepl('_m5|_m20', type) ~ 'less',
grepl('_5', type) ~ 'more'))
type modif
1 a_m5 less
2 a_m20 less
3 a_5 more
我想根据数据框中另一列中的字符串创建一个新列。使用 case_when
和 grepl
如果字符串包含 value1
或 value2
,我想创建一个新的 class。但是,不确定如何放置此 'OR' 语句?
虚拟示例(不起作用):
df <- data.frame(type = "a_m5", "a_m20", "a_5")
df %>%
mutate(modif = case_when(
grepl('_m5'|'_m20', type) ~ 'less', # how to specify here | OR symbol in R?
grepl('_5', type) ~ 'more'))
当然,如果我一一指定语句就可以了(工作):
df %>%
mutate(modif = case_when(
grepl('_m5', type) ~ 'less',
grepl('_m20', type) ~ 'less',
grepl('_5', type) ~ 'more'))
但是我想知道如何把它写成一行,因为我有多个选项?也许像 chars %in% vector
这样的东西可以在这里工作?
期望的输出:
type modif
1 a_m5 less
2 a_m20 less
3 a_5 more
您可以在此处使用 %in%
:
df %>%
mutate(modif = case_when(
type %in% c('_m5', '_m20') ~ 'less',
TRUE ~ 'more')
)
您还可以在每个谓词的 LHS 上保留一个值,以保持一致:
df %>%
mutate(modif = case_when(
'_m5' ~ 'less',
'_m20' ~ 'less',
TRUE ~ 'more')
)
请注意,我不会显式检查 _5
值,假设它是唯一的其他可能值。
我相信您可以将 |
放入您的 grepl 正则表达式中:
df <- data.frame(type = c("a_m5", "a_m20", "a_5"))
df %>%
mutate(modif = case_when(
grepl('_m5|_m20', type) ~ 'less',
grepl('_5', type) ~ 'more'))
type modif
1 a_m5 less
2 a_m20 less
3 a_5 more