#r #dataframe #subset
#r #фрейм данных #подмножество
Вопрос:
У меня есть образец набора данных. Я создал подмножество исходного фрейма данных, используя некоторое условие. Теперь мне нужно извлечь оставшееся содержимое исходного фрейма данных образца, за исключением созданного подмножества. Как я могу это сделать?
data("mtcars")
fulldf <- mtcars
subdf <- subset.data.frame(fulldf, subset = fulldf$disp < 100)
restdf <- subset.data.frame(fulldf, subset = <fulldf without subdf>)
Есть много вопросов по подмножеству фреймов данных в R, но я не смог найти тот, который удовлетворял бы моему требованию.
Также конечное решение не обязательно должно использовать subset.data.frame
. Подойдет любой метод / пакет.
Комментарии:
1. Есть хороший способ использовать
setdiff
изdplyr
:dplyr::setdiff(fulldf, subdf)
2. Спасибо, Маркус! Это сделало свое дело!
Ответ №1:
Лучше назначить логическое условие в base R
идентификатору объекта, а затем отрицать ( !
)
i1 <- fulldf$disp < 100
subdf <- subset.data.frame(fulldf, subset = i1)
restdf <- subset.data.frame(fulldf, subset = !i1)
Также другим вариантом является создание list
из двух наборов данных с split
lst1 <- split(fulldf, i1)
Если ‘subdf’ создается с несколькими условиями (хотя и не ясно), одним из вариантов является добавление переменной последовательности в данные, а затем подмножество с %in%
fulldf$ind <- seq_len(nrow(fulldf))
затем после шага ‘subdf’
restdf <- subset(fulldf, !ind %in% subdf$ind)
и удалите столбцы ‘ind’
restdf$ind <- NULL
subdf$ind <- NULL
Комментарии:
1. Спасибо, это хорошее решение, но, к сожалению, я создаю
subdf
с использованием нескольких условий и не могу сохранить его в одной переменной.2. @snair1591 Разве конечный результат не был бы логическим вектором?
3. Я использую
rbind
для создания своегоsubd
с использованием нескольких условий, если это поможет.4. @snair1591 Я добавил другой
base R
метод. Это также можно сделать, создав условие с помощьюrow.names
, но я думаю, чтоrbind
и другие методы, возможно, изменили имена строк во время процесса5. @snair1591 Это можно было бы легко решить с помощью пакетов, но я бы использовал внешнюю зависимость только в том случае, если нет другого выбора / эффективности и т.д.