R - 用特定符号分隔,垂直裸露, |
R - separate with specific symbol, vertical bare, |
我有一个数据集,其中一列的符号为“|” (来自模型中 2 个变量的相互作用),我想根据这个字符拆分它。
函数 separate 与标准字符配合得很好,你知道我如何指定字符 '|' ?
library(tidyverse)
df <- data.frame(Interaction = c('var1|var2'))
# as expected
df %>% separate(Interaction, c('var1', 'var2'), sep = '1')
# var1 var2
# 1 var |var2
# not as expected
df %>% separate(Interaction, c('var1', 'var2'), sep = '|')
# var1 var2
# 1 v
我们可以转义 (\
) |
,因为它是指定 OR
的正则表达式的元字符,默认情况下 sep
在 regex
模式
如果我们查看 ?separate
文档,
separate(data, col, into, sep = "[^[:alnum:]]+", remove = TRUE,
convert = FALSE, extra = "warn", fill = "warn", ...)
描述为
sep - If character, is interpreted as a regular expression. The default value is a regular expression that matches any sequence of non-alphanumeric values.
df %>%
separate(Interaction, c('var1', 'var2'), sep = '\|')
或放在方括号中
df %>%
separate(Interaction, c('var1', 'var2'), sep = '[|]')
竖线是一个特殊字符,这就是为什么没有达到预期效果的原因:
df %>% separate(Interaction, c('var1', 'var2'), sep = '\|')
这应该可以解决问题。
我有一个数据集,其中一列的符号为“|” (来自模型中 2 个变量的相互作用),我想根据这个字符拆分它。
函数 separate 与标准字符配合得很好,你知道我如何指定字符 '|' ?
library(tidyverse)
df <- data.frame(Interaction = c('var1|var2'))
# as expected
df %>% separate(Interaction, c('var1', 'var2'), sep = '1')
# var1 var2
# 1 var |var2
# not as expected
df %>% separate(Interaction, c('var1', 'var2'), sep = '|')
# var1 var2
# 1 v
我们可以转义 (\
) |
,因为它是指定 OR
的正则表达式的元字符,默认情况下 sep
在 regex
模式
如果我们查看 ?separate
文档,
separate(data, col, into, sep = "[^[:alnum:]]+", remove = TRUE, convert = FALSE, extra = "warn", fill = "warn", ...)
描述为
sep - If character, is interpreted as a regular expression. The default value is a regular expression that matches any sequence of non-alphanumeric values.
df %>%
separate(Interaction, c('var1', 'var2'), sep = '\|')
或放在方括号中
df %>%
separate(Interaction, c('var1', 'var2'), sep = '[|]')
竖线是一个特殊字符,这就是为什么没有达到预期效果的原因:
df %>% separate(Interaction, c('var1', 'var2'), sep = '\|')
这应该可以解决问题。