我试图使用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发布于 2020-02-17 05:35:09
我不确定用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)发布于 2020-02-17 04:09:41
在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方式(如在How to create new column with all non-NA values from multiple other columns?中):
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, tvhttps://stackoverflow.com/questions/60255793
复制相似问题