拆分元素,删除然后将它们连接回来

我有以下内容data.frame:-

a <- data.frame(col_1 = c("1001", "1002", "1003", "1004", "1005"),
                col_2 = c("1002|3932|1003", "1033|1004|1005", "1022|1220|1005", "1001|1002",
                          "2122|1002|1004"))

我想要做的就是在每一个元素col_2,删除所有这些那些不存在的元素col_1。结果data.frame如下

b <- data.frame(col_1 = c("1001", "1002", "1003", "1004", "1005"),
                col_2 = c("1002|1003", "1004|1005", "1005", "1001|1002", "1002|1004")

提前致谢。

回答

基本 R 选项:

在 上拆分字符串|,仅保留其中存在的值col1并将字符串粘贴回去。

a$col_2 <- sapply(strsplit(a$col_2, '|', fixed = TRUE), function(x) 
                  paste0(intersect(x, a$col_1), collapse = '|'))
a

#  col_1     col_2
#1  1001 1002|1003
#2  1002 1004|1005
#3  1003      1005
#4  1004 1001|1002
#5  1005 1002|1004

使用dplyr

library(dplyr)

a %>%
  tidyr::separate_rows(col_2, sep = '|') %>%
  filter(col_2 %in% unique(col_1)) %>%
  group_by(col_1) %>%
  summarise(col_2 = paste0(col_2, collapse = '|'))


以上是拆分元素,删除然后将它们连接回来的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>