Существует ли функция R для возврата общих значений в большинстве, но не во всех векторах?

#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)
 

Я просто добавил параметр для минимального количества раз, которое вы хотите, чтобы он отображался