2016-08-10 2 views
1

У меня есть длинный список значений, которые я хочу использовать для индексирования для удаления строк из другого фрейма данных, который содержит эти значения в определенном столбце.Удаление строк из фрейма данных на основе большого списка

Простой нелогич- сделать это

X <- data.frame(Variable1=c(11,14,12,15),Variable2=c(2,3,1,4)) 
X[X$Variable1!=11 & X$Variable1!=12, ] 

, но есть ли эффективный способ использовать dataframe со значениями у меня есть что список я хочу использовать во второй dataframe?

ответ

1

Мы можем использовать %in% для создания логического индекса, основанного на нескольких значениях.

X[!(X$Variable1 %in% c(11, 12)),] 

Если мы используем data.table вариант будет setkey, а затем свести на нет значения

library(data.table) 
setDT(X, key = "Variable1")[!.(c(11,12))] 
#  Variable1 Variable2 
#1:  14   3 
#2:  15   4 

Или мы используем on, как @David Arenburg прокомментировал

setDT(X)[!.(11:12), on = "Variable1"] 
+0

если c - это кадр данных (допустим, это df2), правильно ли использовать 'X [! Variable1% in% df2,] '? – Jake

+1

@Jake Извините, я имел в виду 'X $ Variable1' – akrun

+1

@Jake Это работает для меня' df2 <- data.frame (group_1 = c (11, 12)); setDT (X) [!. (Df2 $ group_1) , on = "Variable1"] # Variable1 Variable2 1: 14 3 2: 15 4' Я использую 'data.table_1.9.7' – akrun

Смежные вопросы