【问题标题】:Using tidyr::separate with quoted values containing delimiter将 tidyr::separate 与包含分隔符的引用值一起使用
【发布时间】:2022-01-14 19:37:18
【问题描述】:

我有一个相当直截了当的问题,我希望有一个我还没有偶然发现的非常简单的答案。

我正在尝试使用 tidyr::separate() 从单个字符串列(使用逗号作为分隔符)在 data.frame 中创建两列。问题是数据有多个逗号;但是,最左边的列周围有引号。有没有办法在尊重引号内的内容的同时将此值分成两列?

#trying to re-create the issue
band_members <- data.frame(col = paste0('"Paul,George,John,Ringo','"',',','Beatles'))
print(band_members)

----------------------------------
               col                
----------------------------------
 "Paul,George,John,Ringo",Beatles 
----------------------------------

#trying to separate
new_dat <- band_members %>% tidyr::separate(col = col,into = c('members','band'),sep = ',')
print(new_dat)

------------------
 members    band  
--------- --------
  "Paul    George 
------------------

^ 这并不理想。 我想要什么(下):

------------------------------------
         members             band   
-------------------------- ---------
 "Paul,George,John,Ringo"   Beatles 
------------------------------------

任何帮助将不胜感激!

【问题讨论】:

    标签: r dataframe tidyr


    【解决方案1】:

    如果格式总是像 "members",band,使用 sep = '",' 而不是 "," 可能会有所帮助。

    band_members %>% 
      tidyr::separate(col = col,into = c('members','band'),sep = '",') %>%
      mutate(members = paste0(members, "\""))
    
                       members    band
    1 "Paul,George,John,Ringo" Beatles
    

    【讨论】:

    • 谢谢。我应该澄清格式各不相同。通常没有双引号;这只是我试图解释的一个极端情况。
    【解决方案2】:

    你可以使用tidyr::extract()而不是separate,然后这只是一个找到正确正则表达式的例子:

    band_members %>% 
      extract(col, c("members", "band"), "^\"(.*?)\",(.*?)$")
    

    结果:

                     members    band
    1 Paul,George,John,Ringo Beatles
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-11
      • 2016-08-03
      • 1970-01-01
      • 2023-01-01
      • 1970-01-01
      • 2019-08-12
      • 2015-11-14
      相关资源
      最近更新 更多