2016-08-09 3 views
-1

Мне нужно отфильтровать один фрейм данных, используя информацию от другого. Имена и количество столбцов могут меняться, так как количество условий, используемых для выбора. Например, кадр данных, который я хотел бы выбрать из имеет следующую структуру:Гибкий фильтр для кадра данных в R


name info_1 info_2 info_3 info_4 value 
var1 aa  123  bb  xx1 120 
var2 bb  345  cc  xx2 520 
var3 aa  122  cc  xx1 640 
var4 dd  345  dd  xx3 540 
... 

и данных кадра с информацией для фильтров:


info_1 info_3 info_4 
    aa  bb xx1 
    bb  cc N/A 
    dd  N/A N/A 
... 

Количество столбцов в первом кадре данных и количества столбцов которые должны использоваться для фильтров, могут отличаться для разных наборов данных. Есть ли эффективный способ сделать такую ​​фильтрацию? Я думаю, что фильтрация может быть выполнена для цикла для каждого столбца, но, очевидно, это не самый эффективный способ сделать.

+4

Что ваш ожидаемый результат на примере показал? «Фильтр» означает, какие значения вы хотите сохранить/удалить и т. Д.? – akrun

ответ

0

Вы, конечно, ищете:

df[Reduce('&', Map(function(u,v) v%in%u, filtering_df, df[names(filtering_df)])),] 

# name info_1 info_2 info_3 info_4 value 
#1 var1  aa 123  bb xx1 120 
#3 var3  aa 122  cc xx1 640 
+0

Я подозреваю, что это можно было бы решить более элегантно с помощью операции соединения, но кто знает ... Ожидаемый результат не ясен. – Roland

+0

Большое спасибо! Это то, что я искал. – Alex