DataFrame - 唯一值

时间:2017-06-13 15:46:41

标签: r dataframe

假设我有以下数据框:

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

有人可以帮我完成这项任务。

2 个答案:

答案 0 :(得分:2)

这是一个想法,

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

答案 1 :(得分:1)

以下是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