【发布时间】: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 %>% bind_rows()的结果?我不确定,因为有很多重复的行 -
代码末尾缺少一个大括号。也许在此处明确粘贴所需的输出也很有用