Использование другой таблицы данных для кондиционирования столбцов в первичной таблице данных - PullRequest
0 голосов
/ 08 мая 2018

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

В частности, я хочу использовать d2 для выбора строк, где его переменные меньше или равны значениям.

 d1 = data.table('d'=1,'v1'=1:10, 'v2'=1:10)
 d2 = data.table('v1'=5, 'v2'=5)

Так что я бы хотел, чтобы результат был

   d v1 v2
1: 1  1  1
2: 1  2  2
3: 1  3  3
4: 1  4  4
5: 1  5  5

Но я хочу сделать это без ссылки на конкретные имена, если это не очень общий способ, например names(d2).

1 Ответ

0 голосов
/ 08 мая 2018

Вы можете сделать это с небольшим количеством манипуляций с текстом и объединением:

d2[d1, on=sprintf("%1$s>=%1$s", names(d2)), nomatch=0]

#   v1 v2 d
#1:  1  1 1
#2:  2  2 1
#3:  3  3 1
#4:  4  4 1
#5:  5  5 1

Это работает, потому что sprintf расширяется до:

sprintf("%1$s>=%1$s", names(d2))
#[1] "v1>=v1" "v2>=v2"
...