R子集df基于来自另一个数据框的多个列

时间:2018-03-14 08:38:02

标签: r dplyr

我试图找到一种更简洁的方法来使用来自另一个数据帧的行来过滤数据帧(我目前正在使用循环)。

例如,假设您有以下数据框df1,其中包含大量的苹果,梨,柠檬和橙子。还有第5列,我们称之为幸福。

require(gtools)
df1 <- data.frame(permutations(n = 4, r = 4, v = 1:4)) %>% cbind(sample(1:24))
colnames(df1) <- c("Apples", "Pears", "Lemons", "Oranges", "Happiness")

但是,您希望过滤此数据框,只留下第二个数据框中存在的某些水果组合(不是使用相同的列顺序):

df2 = data.frame(Apples = c(1, 3, 2, 4), Pears = c(4, 1, 1, 3), Lemons = c(2, 2, 3, 1), Oranges = c(3, 4, 4, 2))

目前我正在使用循环将df2的每一行作为过滤条件逐个应用,然后绑定结果,例如:

df.ss = list()
for (i in 1:nrow(df2)){

df.ss[[i]] = filter(df1, 
                    df1$Apples == df2$Apples & 
                    df1$Pears == df2$Pears &
                    df1$Lemons == df2$Lemons & 
                    df1$Oranges == df2$Oranges)
}

df.ss %>% bind_rows()

有更优雅的方式来解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找inner join

dplyr::inner_join(df1, df2)