tidyr :: separate()产生意外结果

时间:2019-04-02 18:38:27

标签: r tidyr

我正在向tidyr :: separate()提供数据帧,并得到意外的结果。我在下面有一个最低限度的工作示例,其中显示了我的使用方式,期望产生的结果以及实际产生的结果。为什么这不起作用?

# Create toy data frame
dat <- data.frame(text = c("time_suffer|suffer_employ|suffer_sick"), 
        stringsAsFactors = FALSE)

# Separate variable into 3 columns a,b,c using | as a delimiter
dat %>% tidyr::separate(., col = "text", into = c("a","b","c"), sep = "|")

# What I'm expecting
data.frame(a = "time_suffer", b = "suffer_employ", c = "suffer_sick")

# What I'm actually getting:
data.frame(a = NA, b = "t", c = "1")

我还收到警告“警告消息:预期3件。在1行中丢弃的其他件[1]。”

1 个答案:

答案 0 :(得分:4)

根据文档,如果sep的{​​{1}}参数是字符,则将其解释为正则表达式(如果您使用复杂的分隔符,则非常有用)。但是,这确实意味着,如果要按字面意义匹配字符,则需要在正则表达式中转义具有特殊含义的字符。使用separate作为分隔符:

"\\|"

reprex package(v0.2.1)于2019-04-02创建