r таблица данных подмножество шаблонов условий - PullRequest
1 голос
/ 04 апреля 2020

Для простоты у меня есть:

Таблица данных: names(DT) <- c("FirstName","BirthDate",otherscolumns)

Два вектора: firstname <- c("one","two","three","for") & birthdate <- c("1992-01-01","1993-02-02","1994-03-03","1995-04-04")

Первый Имя («один») соответствует первой дате рождения («1992-01-01») и так далее. Я хотел бы сохранить в DT только те строки, которые соответствуют правильному имени и правильной дате рождения . На данный момент я сделал:

data <- DT[FirstName == firstname [1] & BirthDate == birthdate[1] | 
                    FirstName == firstname [2] & BirthDate == birthdate[2] |
                    FirstName == firstname [3] & BirthDate == birthdate[3] | 
                    FirstName == firstname [4] & BirthDate == birthdate[4]]

Я уверен, что есть лучший способ сделать это. Я попытался сгенерировать строку, но это не сработало. Действительно, в моем реальном эксперименте у меня более 4 имен, и я не считаю, что копирование и изменение индекса - это хороший способ (предметы)

Большое спасибо за вашу помощь

1 Ответ

0 голосов
/ 04 апреля 2020

Мы можем использовать Map до l oop над 'firstname', 'birthdate', векторами, сделать сравнение, затем Reduce с |, чтобы получить логический вектор, который можно использовать для поднабора data.table

library(data.table)
data <- DT[DT[, Reduce(`|`, Map(function(x, y) FirstName == x & 
              BirthDate == y, firstname, birthdate))]]
...