#r
#r
Вопрос:
У меня есть 4 вектора, и я хочу сделать несколько мягкое пересечение, где я принимаю значения, присутствующие по крайней мере в трех из них. Так, например:
f1 <- c("apple", "pear")
f2 <- c("apple", "banana")
f3 <- c("apple", "pear", "orange")
f4 <- c("apple", "pear", "tomato")
lenient-intersect(f1, f2, f3, f4)
"apple" "pear"
существует ли такая функция, как lenient-intersect, где она будет возвращать значения, присутствующие в некотором количестве входных векторов? Есть ли более простой способ сделать это, чем пересекать каждую комбинацию из 2 векторов и выполнять серию операторов if?
Комментарии:
1. Если это фреймы данных, может быть, вам нужно какое-то * join ?
2. Я не думаю, что есть такая функция, но вы, вероятно, могли бы написать ее самостоятельно
Ответ №1:
Вот простая функция, которую вы можете использовать
lenient_intersect <- function(times, ...) {
x <- table(unlist(lapply(list(...), unique)))
names(x[x>=times])
}
lenient_intersect(3, f1, f2, f3, f4)
lenient_intersect(4, f1, f2, f3, f4)
Я просто добавил параметр для минимального количества раз, которое вы хотите, чтобы он отображался