2017-01-22 3 views
0

Мне нужно отфильтровать или подмножить фрейм данных (df1), который имеет 13 переменных статических столбцов другим фреймом данных (df2), который содержит имена столбцов sames как df1, но не тот же номер столбцов. Df2 создается пользователем и содержит столбцы, которые пользователь хочет фильтровать df1 by. Так что df2 может содержать только одно имя столбца или 8 столбцов.Фильтрация кадра данных с использованием динамического фрейма данных

df1

V1  V2 V3 V4 V5 V6 
Chevy V8 4D AT PS NAV 
Chevy V8 2D MT MS NONAV 

df2

V3 V4 V6 
4D AT NAV 

Результаты

V1  V2 V3 V4 V5 V6 
Chevy V8 4D AT PS NAV 

Как я могу сделать это в R? Подмножество не кажется хорошим вариантом, поскольку имена столбцов в df2 являются динамическими и всегда будут разными. Поэтому использование df2 $ V3 не является вариантом.

Заранее спасибо.

ответ

0

Мы можем сделать left_join

library(dplyr) 
left_join(df2, df1) %>% 
     select_(.dots = names(df1)) 
#  V1 V2 V3 V4 V5 V6 
#1 Chevy V8 4D AT PS NAV 

Или с помощью merge из base R

merge(df1, df2, all.y= TRUE)[names(df1)] 
# V1 V2 V3 V4 V5 V6 
#1 Chevy V8 4D AT PS NAV 
0

Это именно работу для semi_join:

library(dplyr) 
semi_join(df1, df2) 
+0

Спасибо за отзыв. Я могу использовать только базу R. У меня нет пакета dplyr, и я не могу его установить. Можно ли использовать sqldf? – Fishing101

+0

В этом случае будет выполнена модификация ответа akrun с 'merge': ' merge (df1, df2) [, names (df1), drop = FALSE] ' – echasnovski

Смежные вопросы