semi_join 在 R 中但拉回重复项
Posted
技术标签:
【中文标题】semi_join 在 R 中但拉回重复项【英文标题】:semi_join in R but pull back duplicates 【发布时间】:2017-05-25 05:19:44 【问题描述】:我遇到了来自 dplyr 的 semi_join 问题。理想情况下,我想对 dfA 与 dfB 进行半联接。 dfA 具有重复值,dfB 也是如此。我想从 dfA 中撤回所有与 dfB 匹配的值,甚至在 dfA 中重复。
dfA dfB >> dfC
x y z x g x y z
1 r 5 1 lkm 1 r 5
1 b 4 1 pok 1 b 4
2 4 e 2 jij 2 4 e
3 5 r 2 pop 3 5 r
3 9 g 3 hhg 3 9 g
4 3 0 5 trt
我想得到的是上面的 dfC 输出。因为至少有 1 个 x 匹配,所以它会拉回 dfA 中的所有 x
semi_join(dfA, dfB, by = "x")
dfC
x y z
1 r 5
2 4 e
3 5 r
inner_join(dfA, dfB, by = "x")
x y z g
1 r 5 lkm
1 r 5 pok
1 b 4 lkm
1 b 4 pok
2 4 e jij
2 4 e pop
3 5 r hhg
3 9 g hhg
这两者都没有给我正确的结果。任何帮助都会很棒!提前致谢
【问题讨论】:
dfA[dfA$x %in% dfB$x,]
【参考方案1】:
不知道为什么需要 join
:只需使用 %in%
library(data.table)
setDT(dfA)[x %in% dfB$x,]
# simple base R approach :
dfA[dfA$x %in% dfB$x,]
【讨论】:
感谢@joel.wilson - 我在学习 R 方面还是新手,所以我现在使用的是我所知道的。您的解决方案有效,但它也与我的 semi_join 解决方案相匹配。在 semi_join 上,它不会拉回整个行的重复项吗?或他们的钥匙的副本?我担心它是关键,但从这个例子看来,它是重复的整行。如果是,我上面的例子是错误的。 @MattW。如果我没有错,它会拉出整行。没怎么用semi_join
@joel.wilson 这可以解释我们得出相同的结论。这解决了我的问题。非常感谢您的回复!大量帮助【参考方案2】:
如果您正在使用 dplyr
并继续通过管道传递它
library(dplyr)
dfA %>% filter(x %in% dfB$x)
【讨论】:
这也有效!非常感谢。感谢您的帮助以上是关于semi_join 在 R 中但拉回重复项的主要内容,如果未能解决你的问题,请参考以下文章
C ++的函数正则表达式在linux(CentOS)中但在OSX中遇到错误[重复]