我有两个巨大的数据框,其中一个表包含较少的观察结果。 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/