我正在向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]。”
答案 0 :(得分:4)
根据文档,如果sep
的{{1}}参数是字符,则将其解释为正则表达式(如果您使用复杂的分隔符,则非常有用)。但是,这确实意味着,如果要按字面意义匹配字符,则需要在正则表达式中转义具有特殊含义的字符。使用separate
作为分隔符:
"\\|"
由reprex package(v0.2.1)于2019-04-02创建