R-以特定符号分隔,垂直裸线,|

时间:2019-05-08 19:24:16

标签: r regex tidyr separator

我有一个数据集,其中的列带有符号“ |” (来自模型中2个变量的交互),我想根据这个角色将其拆分。

单独的功能可与标准字符配合使用,您如何确定字符'|' ?

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

2 个答案:

答案 0 :(得分:1)

我们可以对\\进行转义({|),因为它是正则表达式的元字符,它指定了OR,默认情况下sep在{{1}中}模式

如果我们查看regex文档,

  

separate(data,col,into,sep =“ [^ [:alnum:]] +”,remove = TRUE,     convert = FALSE,额外=“警告”,填充=“警告”,...)

它被描述为

  

sep-如果为character,则解释为正则表达式。默认值为正则表达式,可匹配任何非字母数字值序列。

?separate

或将其放在方括号中

df %>% 
  separate(Interaction, c('var1', 'var2'), sep = '\\|')

答案 1 :(得分:1)

竖线是一个特殊字符,这就是为什么表现不如预期的原因:

df %>% separate(Interaction, c('var1', 'var2'), sep = '\\|')

那应该可以解决问题。