Сегодня я столкнулся с проблемой, которая легко разрешима. Это дало мне головные боли больше часа, и я не знаю, как это решить, не выполняя цикл (который требует много времени и отличается от элегантного программирования).R: Подмножество вектора для нескольких совпадений
У меня есть набор чисел от 400 до 420 («данные»). Тогда есть диапазон, заданный пользователем. Этот диапазон впоследствии станет подмножеством данных («vector_subset»). Кроме того, существует вектор с номерами, которые должны быть исключены из данных («vector_substract»).
Это то, что я получаю:
data <- seq(400,420)
vector_subset <- seq(405,412)
vector_substract <- c(402,403,404,405,408,409,412,413,414)
теперь я хочу, чтобы выяснить, какие элементы мне нужно извлечь, потому что они оба в векторе пользователя подмножества и векторе Substraction:
intersection <- intersect(vector_subset, vector_substract)
Это прекрасно работает:
> intersection
[1] 405 408 409 412
Теперь я хочу исключить эти значения из «данных». Но если я пытаюсь это:
result <- data[-which(data==intersection)]
R говорит мне, что
В данных == пересечения: больше длины объекта не кратна длине короче объекта
Если удалить один элемент за раз, он отлично работает. Нравится:
result <- data[-which(data==intersection[1])]
> result
[1] 400 401 402 403 404 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420
-> первая запись «пересечения» исчезла (405).
Так что я мог бы реализовать запись для записи и удалить запись по записи, но это займет слишком много времени. Есть ли лучший способ для создания моего подмножества?
Спасибо всем помощникам!
попробовать '' данных – Cath
Это он [данные% в% пересечения!]! Я знал, что решение будет простым. Отлично. Спасибо за ваш быстрый ответ - это было очень полезно :) – offeltoffel
приветствую вас, рад помочь ;-) – Cath