r - 查找出现在一个表中但不在第二个表中的行号

标签 r join dplyr anti-join

我有两个巨大的数据框,其中一个表包含较少的观察结果。 dplyr 的反连接工作完美且快速,但如果可能的话,我会保留原始行名称。有什么函数/包可以以 anti_join 的速度实现这一点吗?我当前的解决方案

library(magrittr)
library(dplyr)

iris
iris2 <- iris[-c(3, 9, 30, 40), ]

iris <- iris %>% mutate(rown = 1:n())

anti_join(iris, iris2) %>% set_rownames(.$rown) %>% select(-rown)

编辑:寻找一个不需要添加行号的解决方案。

最佳答案

普通 R 怎么样?

iris$rows<-seq(1,dim(iris)[1],1)
iris2 <- iris[-c(3, 9, 30, 40), ]
iris[which(!(iris$rows %in% iris2$rows)),]

时间比较

iris <- iris %>% mutate(rown = 1:n())
iris$rows<-seq(1,dim(iris)[1],1)
 iris2 <- iris[-c(3, 9, 30, 40), ]


    f=function(){
      anti_join(iris, iris2) %>% set_rownames(.$rown) %>% select(-rown)
    }


f2=function(){
  iris[which(!(iris$rows %in% iris2$rows)),]   
}

    microbenchmark(f(),f2())

 expr      min        lq      mean   median       uq      max neval
  f() 1531.523 1832.0710 2384.1375 2407.061 2828.096 4084.061   100
 f2()  104.869  168.0125  238.7027  235.396  290.284  513.185   100

不使用任何行数

mtcars 
mtcars2<-mtcars[-c(3,9,40),]
mtcars[which(!row.names(mtcars) %in% row.names(mtcars2)),]

希望对你有帮助

关于r - 查找出现在一个表中但不在第二个表中的行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43841646/

相关文章:

mysql 联合不工作

dataframe - Pyspark Dataframe 差异 - param != null 不返回的地方?

r - 如何通过将现有行的值与 R dplyr 组合来将行添加到数据帧

如果 r 中的值变为负数,则重置 cumsum

r - 打印当前的随机种子,以便稍后可以使用set.seed()输入

R - 我是否需要使用 print() 添加显式换行符?

graphics - R 将热图简化为 pdf

java - JPA Criteria API - 使用 ElementCollection 外键上的 WHERE 条件连接 ElementCollection

r - 线性插值时间序列中的缺失值

R + ggplot : how to use a custom smoother (Gaussian Process)