本文介绍了Tidyr::Separate()产生意外结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我向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]中丢弃了额外的片。"
推荐答案
根据文档,separate
的sep
参数如果是字符,则被解释为正则表达式(如果有复杂的分隔符,则非常有用)。然而,这确实意味着,如果您想要逐字匹配正则表达式中具有特殊含义的字符,则需要对其进行转义。使用"\|"
作为分隔符:
library(tidyverse)
dat <- data.frame(text = c("time_suffer|suffer_employ|suffer_sick"),
stringsAsFactors = FALSE)
dat %>%
tidyr::separate(., col = "text", into = c("a","b","c"), sep = "\|")
#> a b c
#> 1 time_suffer suffer_employ suffer_sick
于2019-04-02创建
这篇关于Tidyr::Separate()产生意外结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!