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 的正则表达式的元字符,默认情况下 sepregex模式

如果我们查看 ?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 = '\|')

这应该可以解决问题。