R - исключить строки из кадра данных, которые не содержат определенных значений - PullRequest
2 голосов
/ 24 апреля 2020

У меня есть огромный фрейм данных, из которого мне нужно удалить строки, которые не содержат никаких значений, присутствующих в векторе (векторное имя «коды»).

Пример фрейма данных:

df <- data.frame(ID = as.integer(c(10001, 10002, 10004, 10005, 10006)), 
                 X1 = as.integer(c(150, 120, 175, 160, 1)),
                 X2 = as.integer(c(1, 1412415, 16420, 19920, 150)))
> df
     ID  X1      X2
1 10001 150       1
2 10002 120 1412415
3 10003 175   16420
4 10004 160   19920
5 10005   1     150

codes <- c(120, 150)
codes <- as.integer(codes)

Я пробовал несколько вариантов, вот один неудачный пример:

newdf <- df[do.call(paste, df[2:3]) %in% codes,]

> newdf
[1] ID X1 X2
<0 rows> (or 0-length row.names)

Вместо этого newdf должен содержать строки 1, 2 и 5 с идентификационными номерами 10001, 10002 и 10005 как таковые:

> newdf
     ID  X1      X2
1 10001 150       1
2 10002 120 1412415
5 10005   1     150

Ответы [ 2 ]

2 голосов
/ 24 апреля 2020

Этот способ хорош, так как он масштабируется на любое количество столбцов, начинающихся с X.

dplyr::filter_at(df, vars(starts_with("X")), any_vars(. %in% codes))
0 голосов
/ 24 апреля 2020

dplyr::filter() делает то, что вы хотите. Он принимает любое условие (например, является частью значения вектора X) и удаляет все строки, не соответствующие условиям:

library(dplyr)

df %>%
filter(X1 %in% codes | X2 %in% codes)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...