如何用R tidy风格获取字符串向量的交集(非并集)?
用tidy风格函数获取字符串向量交集的简洁方法
- 你原来的实现能得到结果,但确实有点繁琐,没必要把向量转成tibble再做
inner_join。tidyverse里的dplyr::intersect()可以直接处理向量,一步就能拿到交集:
library(dplyr) string_a <- c("ab", "bc", "cd", "df", "aq") string_b <- c("ac", "bc", "bd", "df", "aq") # 直接获取两个向量的交集 inter_str <- dplyr::intersect(string_a, string_b)
运行后得到的结果和你原来的代码完全一致:[1] "bc" "df" "aq"
- 如果你的向量里有重复元素,且想要保留交集里的重复项(比如
string_a里有两个"bc",string_b里有三个"bc",希望结果里也保留两个"bc"),可以用更简洁的tibble操作方式:
library(dplyr) library(tibble) string_a <- c("ab", "bc", "bc", "cd", "df", "aq") string_b <- c("ac", "bc", "bc", "bc", "bd", "df", "aq") inter_str <- tibble(value = string_a) %>% semi_join(tibble(value = string_b), by = "value") %>% pull(value)
这种写法会保留string_a中重复的交集元素,结果是[1] "bc" "bc" "df" "aq"
内容的提问来源于stack exchange,提问作者K Y
相关产品推荐
相关产品推荐

