【问题标题】:DataFrame - Unique valuesDataFrame - 唯一值
【发布时间】:2017-06-14 03:12:55
【问题描述】:

假设我有以下数据框:

table<-data.frame(col1=c("ab ac", "ac", "ab", "ab ab", "ab","ac ac ac", "aa aa ab","aa ab ac"))

      col1 
1    ab ac    
2       ac   
3       ab   
4    ab ab   
5       ab   
6 ac ac ac  
7 aa aa ab    
8 aa ab ac    

如果只有一个值,或者如果存在两个或三个相似的值,或者另一方面,每列中不同值的数量,我想创建另一个具有唯一值的列。

table<-data.frame(col1=c("ab ac", "ac", "ab", "ab ab", "ab","ac ac ac", "aa aa ab","aa ab ac"),col2=c("2","ac","ab","ab","ab","ac","2","3"))

      col1 col2
1    ab ac    2
2       ac   ac
3       ab   ab
4    ab ab   ab
5       ab   ab
6 ac ac ac   ac
7 aa aa ab    2
8 aa ab ac    3

谁能帮我完成这项任务。

【问题讨论】:

  • 尽量避免以现有的 R 函数命名数据框(例如 table

标签: r dataframe


【解决方案1】:

这是一个想法,

sapply(strsplit(table$col1, ' '), function(i) ifelse(length(unique(i)) > 1, length(unique(i)), i))
#[1] "2"  "ac" "ab" "ab" "ab" "ac" "2"  "3" 

【讨论】:

    【解决方案2】:

    这是tidyverse的另一个选项

    library(tidyverse)
    table %>%
        mutate(colN = col1) %>%
        rownames_to_column("rn")  %>% 
        separate_rows(colN) %>% 
        group_by(rn) %>%
        summarise(col1 = first(col1), 
                  col2 = n_distinct(colN),
                  col2 = replace(col2, col2==1, unique(colN))) %>% 
        select(-rn)
    # A tibble: 8 x 2
    #      col1  col2
    #    <fctr> <chr>
    #1    ab ac     2
    #2       ac    ac
    #3       ab    ab
    #4    ab ab    ab
    #5       ab    ab
    #6 ac ac ac    ac
    #7 aa aa ab     2
    #8 aa ab ac     3
    

    【讨论】:

      猜你喜欢
      • 2019-06-03
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 2019-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多