单独的函数与sep =" |"没有工作

时间:2018-02-01 07:02:19

标签: r tidyr

我有这个示例 dataframe ,并希望明确区分" |"

df <- data.frame(x = c("11|", "22|", "|33", "44|")) 

df %>% separate(x, c("A", "B"), sep = "|")

以下是我需要的内容:

#   A B
# 1   1
# 2   2
# 3   |
# 4   4
# Warning message:
#   Too many values at 4 locations: 1, 2, 3, 4 

我期待这个输出:

#    A  B
# 1 11   
# 2 22   
# 3    33
# 4 44   

1 个答案:

答案 0 :(得分:4)

由于|在正则表达式中的含义为“或”,因此如果您的字面意思是\\,则需要使用library(tidyr) df <- data.frame(x = c("11|", "22|", "|33", "44|")) df %>% separate(x, c("A", "B"), sep = "\\|") #> A B #> 1 11 #> 2 22 #> 3 33 #> 4 44 进行转义:

sep

正如David指出的那样,它包含在"[^[:alnum:]]+"convert = TRUE的默认值中,它使用任何非字母数字字符作为分隔符,因此省略参数将执行您想要的操作。添加df %>% separate(x, c("A", "B"), convert = TRUE) #> A B #> 1 11 NA #> 2 22 NA #> 3 NA 33 #> 4 44 NA 也会将数字转换为实际数字,因此您可以编写:

{clean:true}

这可能是一种更有用的形式。