У мене є дані, подібні до цього:
dt <- structure(list(fct = structure(c(1L, 2L, 3L, 4L, 3L, 4L, 1L, 2L, 3L, 1L, 2L, 3L, 2L, 3L, 4L), .Label = c("a", "b", "c", "d"), class = "factor"), X = c(2L, 4L, 3L, 2L, 5L, 4L, 7L, 2L, 9L, 1L, 4L, 2L, 5L, 4L, 2L)), .Names = c("fct", "X"), class = "data.frame", row.names = c(NA, -15L))
Я хочу вибрати рядки з цього кадру даних на основі значень у fct
змінній. Наприклад, якщо я хочу вибрати рядки, що містять або "a", або "c", я можу зробити це:
dt[dt$fct == 'a' | dt$fct == 'c', ]
який дає врожай
1 a 2
3 c 3
5 c 5
7 a 7
9 c 9
10 a 1
12 c 2
14 c 4
як і очікувалося. Але мої фактичні дані є більш складними, і я насправді хочу вибрати рядки на основі значень у векторі, таких як
vc <- c('a', 'c')
Тож я спробував
dt[dt$fct == vc, ]
але, звичайно, це не працює. Я знаю, що міг би щось кодувати, щоб прокрутити вектор і витягнути необхідні рядки та додати їх до нового кадру даних, але я сподівався, що є більш елегантний спосіб.
Отже, як я можу фільтрувати / підгрупувати свої дані на основі вмісту вектора vc
?
dt[dt$fct %in% vc,]
В основному==
це для одного елемента і%in%
для векторного порівняння.