Tidyr::Separate()产生意外结果 [英] tidyr::separate() producing unexpected results

查看:19
本文介绍了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]中丢弃了额外的片。"

推荐答案

根据文档,separatesep参数如果是字符,则被解释为正则表达式(如果有复杂的分隔符,则非常有用)。然而,这确实意味着,如果您想要逐字匹配正则表达式中具有特殊含义的字符,则需要对其进行转义。使用"\|"作为分隔符:

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

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

这篇关于Tidyr::Separate()产生意外结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆