【问题标题】:separate_rows generating quotes around the result单独的行在结果周围生成引号
【发布时间】:2020-09-07 10:38:26
【问题描述】:

separate_rows 在操作后生成结果值周围的引号 (")。这是正常行为吗?如何在同一操作中防止它在操作后不显式删除它们?

df <- data.frame(a = c("c_1", "c_2", "c_3", "c_4", "c_5"), 
                 b = c("a (+1)", "b (+2)", "a (+2), c (+5)", "e (+2)", "b (+2), e (+5)")) 

    a              b
1 c_1         a (+1)
2 c_2         b (+2)
3 c_3 a (+2), c (+5)
4 c_4         e (+2)
5 c_5 b (+2), e (+5)

df %>%  tidyr::separate_rows(b, sep = ",", convert = TRUE)
# # A tibble: 7 x 2
#     a     b        
#   <chr> <chr>    
# 1 c_1   "a (+1)" 
# 2 c_2   "b (+2)" 
# 3 c_3   "a (+2)" 
# 4 c_3   " c (+5)"
# 5 c_4   "e (+2)" 
# 6 c_5   "b (+2)" 
# 7 c_5   " e (+5)"

问题是not about 将一行拆分为多行。它已经在我的尝试中展示了,代码可以实现它。

【问题讨论】:

    标签: r tidyr


    【解决方案1】:

    那些引号并不像您想象的那样,这正是 tidyverse 打印的方式 - 试图表明存在空格。见下文:

    library(tidyverse)
    
    x1 <- df %>% separate_rows(b, sep = ",", convert = TRUE)
    x2 <- as.data.frame(x1)
    
    x1
    # # A tibble: 7 x 2
    #   a     b        
    #   <chr> <chr>    
    # 1 c_1   "a (+1)" 
    # 2 c_2   "b (+2)" 
    # 3 c_3   "a (+2)" 
    # 4 c_3   " c (+5)"
    # 5 c_4   "e (+2)" 
    # 6 c_5   "b (+2)" 
    # 7 c_5   " e (+5)"
    
    x2
    #     a       b
    # 1 c_1  a (+1)
    # 2 c_2  b (+2)
    # 3 c_3  a (+2)
    # 4 c_3  c (+5)
    # 5 c_4  e (+2)
    # 6 c_5  b (+2)
    # 7 c_5  e (+5)
    
    identical(x1$b, x2$b)
    # [1] TRUE
    

    【讨论】:

      【解决方案2】:

      sep 中的逗号后添加空格:

      tidyr::separate_rows(df, b, sep = ",\\s", convert = TRUE)
      
      #  a     b     
      #  <chr> <chr> 
      #1 c_1   a (+1)
      #2 c_2   b (+2)
      #3 c_3   a (+2)
      #4 c_3   c (+5)
      #5 c_4   e (+2)
      #6 c_5   b (+2)
      #7 c_5   e (+5)
      

      【讨论】:

      • 感谢您的回答,我可以在 10 分钟后接受。您能否建议是否可以在操作中提取带有加号的数字?
      • @Prradep 避免在 cmets 中提出新问题,作为新问题发布。
      【解决方案3】:

      这是一个data.table 选项

      setDT(df)
      df[,strsplit(b,", "), by = a]
      

      给予

          a     V1
      1: c_1 a (+1)
      2: c_2 b (+2)
      3: c_3 a (+2)
      4: c_3 c (+5)
      5: c_4 e (+2)
      6: c_5 b (+2)
      7: c_5 e (+5)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-16
        • 1970-01-01
        • 1970-01-01
        • 2022-12-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多