[英]Using the unite function in R and removing duplicated values
我正在嘗試使用 R 中的unite
函數來跨列連接值,但也對值進行重復數據刪除。 我怎樣才能做到這一點?
這是輸入數據:
input <- tibble(
id = c('aa', 'ss', 'dd', 'qq'),
'2017' = c('tv', NA, NA, 'web'),
'2018' = c('tv', 'web', NA, NA),
'2019' = c(NA, 'web', 'book', 'tv')
)
# A tibble: 4 x 4
id `2017` `2018` `2019`
<chr> <chr> <chr> <chr>
1 aa tv tv NA
2 ss NA web web
3 dd NA NA book
4 qq web NA tv
ALL 列所需的輸出是:
> output
# A tibble: 4 x 5
id `2017` `2018` `2019` ALL
<chr> <chr> <chr> <chr> <chr>
1 aa tv tv NA tv
2 ss NA web web web
3 dd NA NA book book
4 qq web NA tv web, tv
SO 上也存在類似的問題,但是由於您正在尋求unite
解決方案,而我找不到任何專門使用unite
解決方案,因此我們開始:
使用unite
input %>% unite(ALL, -id, sep = ", ", remove = FALSE, na.rm = TRUE)
## A tibble: 4 x 5
# id ALL `2017` `2018` `2019`
# <chr> <chr> <chr> <chr> <chr>
#1 aa tv tv NA NA
#2 ss web NA web NA
#3 dd book NA NA book
#4 qq web, tv web NA tv
要恢復預期輸出的確切列順序,您可以添加%>% select(names(input), ALL)
。
或者,使用nest
input %>%
group_by(id) %>%
nest() %>%
mutate(ALL = map_chr(data, ~toString(unlist(.x[!is.na(unlist(.x))])))) %>%
unnest(data)
## A tibble: 4 x 5
## Groups: id [4]
# id `2017` `2018` `2019` ALL
# <chr> <chr> <chr> <chr> <chr>
#1 aa tv NA NA tv
#2 ss NA web NA web
#3 dd NA NA book book
#4 qq web NA tv web, tv
或基本 R 方式(如如何使用來自多個其他列的所有非 NA 值創建新列? ):
input$ALL <- apply(input[, -1], 1, function(x) toString(x[!is.na(x)]))
input
# A tibble: 4 x 5
# id `2017` `2018` `2019` ALL
# <chr> <chr> <chr> <chr> <chr>
#1 aa tv NA NA tv
#2 ss NA web NA web
#3 dd NA NA book book
#4 qq web NA tv web, tv
我不確定unite
是否可以進行重復數據刪除,但是您可以按行apply
。
input$ALL <- apply(input[-1], 1, function(x) toString(na.omit(unique(x))))
或者一種tidyverse
方式可能是使用pmap
library(tidyverse)
input %>%
mutate(ALL = pmap_chr(select(., -id), ~toString(unique(na.omit(c(...))))))
# id `2017` `2018` `2019` ALL
# <chr> <chr> <chr> <chr> <chr>
#1 aa tv tv NA tv
#2 ss NA web web web
#3 dd NA NA book book
#4 qq web NA tv web, tv
或者以長格式獲取數據然后加入
input %>%
pivot_longer(cols = -id, values_drop_na = TRUE) %>%
group_by(id) %>%
summarise(ALL = toString(unique(value))) %>%
left_join(input)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.