【问题标题】:Split information from two columns, R, tidyverse从两列拆分信息,R,tidyverse
【发布时间】:2020-04-27 08:31:23
【问题描述】:

我在两列中有一些数据:

# A tibble: 16 x 2
   code  niveau
   <chr>  <dbl>
 1 A          1
 2 1          2
 3 2          2
 4 3          2
 5 4          2
 6 5          2
 7 B          1
 8 6          2
 9 7          2

我想要的输出是:

 A tibble: 16 x 3
   code  niveau cat  
   <chr>  <dbl> <chr>
 1 A          1 A    
 2 1          2 A    
 3 2          2 A    
 4 3          2 A    
 5 4          2 A    
 6 5          2 A    
 7 B          1 B    
 8 6          2 B  

我有没有一种简洁的方法来转换这些数据而无需循环?

这里有一些虚拟数据:

data<-tibble(code=c('A', 1,2,3,4,5,'B', 6,7,8,9,'C',10,11,12,13), niveau=c(1, 2,2,2,2,2,1,2,2,2,2,1,2,2,2,2))

desired_output<-tibble(code=c('A', 1,2,3,4,5,'B', 6,7,8,9,'C',10,11,12,13), niveau=c(1, 2,2,2,2,2,1,2,2,2,2,1,2,2,2,2), 
                       cat=c(rep('A', 6),rep('B', 5), rep('C', 5)))

尼古拉斯

【问题讨论】:

    标签: r tidyverse


    【解决方案1】:

    也许,您可以使用NA 创建一个新列catreplace code 值,其中有一个数字。然后我们可以使用fill 将缺失值替换为之前的非 NA 值。

    library(dplyr)
    data %>% mutate(cat = replace(code, grepl('\\d', code), NA)) %>% tidyr::fill(cat)
    
    # A tibble: 16 x 3
    #   code  niveau cat  
    #   <chr>  <dbl> <chr>
    # 1 A          1 A    
    # 2 1          2 A    
    # 3 2          2 A    
    # 4 3          2 A    
    # 5 4          2 A    
    # 6 5          2 A    
    # 7 B          1 B    
    # 8 6          2 B    
    # 9 7          2 B    
    #10 8          2 B    
    #11 9          2 B    
    #12 C          1 C    
    #13 10         2 C    
    #14 11         2 C    
    #15 12         2 C    
    #16 13         2 C  
    

    【讨论】:

    • 嗨,Ronak,这很好用,可以节省很多时间——我不知道填充功能。非常感谢:-)
    【解决方案2】:

    我们可以从stringr使用str_detect

    library(dplyr)
    library(stringr)
    library(tidyr)
    data %>%
         mutate(cat = replace(code, str_detect(code, '\\d'), NA)) %>% 
         fill(cat)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      相关资源
      最近更新 更多