Удаление кадра данных строк в R при условии, если какая-либо из (конкретная переменная) равна

Я уже некоторое время борюсь с этим кодом... У меня есть этот вектор уникального идентификатора "EID" длиной 821, извлеченный из одного из моих фреймов данных (скейт). Это выглядит так:

> head(skate$EID)
[1] "896-19" "895-8"  "899-1"  "899-5"  "899-8"  "895-7" 

Я хотел бы удалить полные строки в другом кадре данных (t5), если какой-либо из t5$EID равен (дубликат) скейт$EID.

Мне удалось получить свой «дублированный» кадр данных в t5 всех моих соответствующих EID следующим образом:

> xx<-skate$EID
> t5[match(xx,t5[,26]), ]#gives me a dataframe of all matching EID in skate$EID
       record.t trip set month stratum NAFO unit.area time dur.set distance
8948          5  896  19    11     221   2J       N12  908      15        8
8849          5  895   8    10     766   3O       R36 1650      16        8
9289          5  899   1    12     743   3L       V26 2052      15        8
9299          5  899   5    12     746   3L       W27 1129      14        7

Где t5[,26] соответствуют столбцу t5$EID. Я уверен, что это просто, но я не уверен, как удалить все это из моего фрейма данных t5! Советы будут очень признательны! Благодарю вас!


person GodinA    schedule 06.11.2011    source источник


Ответы (1)


Есть много способов сделать это. Для проверки элементов вектора A, отсутствующих в векторе B, вы можете использовать комбинацию !, логического оператора отрицания R (см. ?"!") и %in% (см. ?%in%). Затем вы используете результаты этого теста, чтобы указать, какие строки сохранить.

# Create two example data.frames
skate <- data.frame(EID = c("896-19", "895-8", "899-1", "899-5"), 
                    score = 1:4)
t5 <- data.frame(EID = c("896-19", "camel", "899-1", "goat", "899-1"), 
                 score = 105:101)

# Method 1
t5[!t5$EID %in% skate$EID, ] 

# Method 2 (using the very handy subset() function)
subset(t5, !EID %in% skate$EID)
person Josh O'Brien    schedule 06.11.2011
comment
Аааа так просто :) Большое спасибо! - person GodinA; 06.11.2011
comment
Джош ведет себя вежливо, но вам обязательно нужно нажать на галочку, чтобы принять ответ, если на ваш вопрос был дан ответ. Это выгодно для вашей репутации, и это просто поддерживает сайт в чистоте и чистоте, если ответы помечены как отвеченные (скажите это в десять раз быстрее!). - person Ari B. Friedman; 06.11.2011