【问题标题】:Unite columns with unique values将具有唯一值的列合并
【发布时间】:2018-07-21 09:02:40
【问题描述】:

假设我有一个这样的数据框:

test <- data.frame(x = c('v01','v02','v03'),
                   y = c('v01','v05','v06'),
                   z = c('v03', 'v03','v08'))

我可以通过 tidyverse pacakge 合并 x:z 列:

test %>% 
  as.tbl %>%
  unite(new_col, x:y:z, sep = ',', remove = F)

结果如下:

  new_col     x     y     z    
  <chr>       <fct> <fct> <fct>
1 v01,v01,v03 v01   v01   v03  
2 v02,v05,v03 v02   v05   v03  
3 v03,v06,v08 v03   v06   v08 

但我想要的是独特的价值,比如第一行只有'v01,v03':

  new_col     x     y     z    
  <chr>       <fct> <fct> <fct>
1 v01,v03     v01   v01   v03  
2 v02,v05,v03 v02   v05   v03  
3 v03,v06,v08 v03   v06   v08 

有什么帮助吗?

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    另一种方式,不用unite也可以一行完成:

    test$new_col <- apply(test, 1, function(x) paste(unique(x), collapse = ','))
    

    【讨论】:

      【解决方案2】:

      获取您的新列并用 sep = "," 分割它。然后只抓取独特的元素并粘贴它:

      test <- data.frame(x = c('v01','v02','v03'),
                         y = c('v01','v05','v06'),
                         z = c('v03', 'v03','v08'))
      
      test = test %>% unite(new_col, x:z, sep = ',', remove = F)
      test$new_col = sapply(strsplit(test$new_col, ","), 
                            function(x) new_col = paste(unique(x), collapse = ","))
      

      【讨论】:

        【解决方案3】:

        我们将列更改为character 类,使用pmap(来自purrr)获取每行的unique 元素和paste 一起

        library(tidyverse)
        test %>% 
          mutate_all(as.character) %>% 
          pmap_chr(~ c(...) %>% 
                         unique %>% 
                         toString) %>% 
          bind_cols(new_col = ., test)
        # A tibble: 3 x 4
        #  new_col       x     y     z    
        #  <chr>         <fct> <fct> <fct>
        #1 v01, v03      v01   v01   v03  
        #2 v02, v05, v03 v02   v05   v03  
        #3 v03, v06, v08 v03   v06   v08  
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-04-11
          • 2021-04-19
          • 2011-09-11
          相关资源
          最近更新 更多