假设我有以下数据框:
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
有人可以帮我完成这项任务。
答案 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