说我有一个像这样的数据框:
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
有帮助吗?
答案 0 :(得分:4)
另一种方法,您可以不使用unite
而在一行中完成操作:
test$new_col <- apply(test, 1, function(x) paste(unique(x), collapse = ','))
答案 1 :(得分: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 = ","))
答案 2 :(得分:0)
我们将列更改为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