【问题标题】:R subset df based on multiple columns from another data frame基于来自另一个数据帧的多列的 R 子集 df
【发布时间】:2018-03-14 08:38:01
【问题描述】:

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

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

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()

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

【问题讨论】:

  • 你从哪里得到permutations()
  • 糟糕。立即查看编辑!
  • 您的预期输出是df.ss %&gt;% bind_rows() 的结果?我不确定,因为有很多重复的行
  • 代码末尾缺少一个大括号。也许在此处明确粘贴所需的输出也很有用

标签: r dplyr


【解决方案1】:

我想你正在寻找inner join

dplyr::inner_join(df1, df2)

【讨论】:

  • 如果您有多个数据帧(类似于 df1)和一个额外的列给出日期 - 即如果您在一周中的每一天都有 df1 并且您将数据帧绑定在一起。那你可以用什么方法呢?
  • 我在合并时尝试了同样的方法,但这给出了不同的结果然后他的bind_rows() ...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-07
  • 2013-06-14
  • 2017-11-10
  • 1970-01-01
  • 2020-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多