代码之家  ›  专栏  ›  技术社区  ›  Prradep

separate_rows通过操作生成引号

  •  0
  • Prradep  · 技术社区  · 4 年前

    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 将一行拆分为多行。它已经在我的尝试中显示出来了,代码可以实现它。

    1 回复  |  直到 4 年前
        1
  •  7
  •   zx8754    4 年前

    这些引文并不像你想象的那样,只是 蒂迪弗斯 正在打印-试图显示有空格。见下文:

    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
  •  2
  •   Ronak Shah    4 年前

    在逗号后添加空格 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)
    
        3
  •  0
  •   ThomasIsCoding    4 年前

    这是一个 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)