batteryhp
有一个千万行的矩阵,比如 某一列取值为1,2,3,4,5,6...现在想 剔除这一列值为 1,4,7,9...的行,提取剩下的行,如何快速做到呢?谢谢!
libingfei
假设是第一列,不想要的集合时b
c<-a[!a[,1]%in%b,]
若那一列恰好等于行号:
c<-a[-b,]
batteryhp
3Q~~
batteryhp
谢谢!
请问如何提取相同的数对呢? 比如 两个大型矩阵是 n行2列,如下 a和b
a
[,1] [,2]
[1,] 4 8
[2,] 1 5
[3,] 3 7
[4,] 2 6
b
[,1] [,2]
[1,] 1 5
[2,] 2 6
[3,] 3 0
[4,] 4 0
这里a中的第二行、第四行分别与b中的第一行、第二行相同,如何快速提取相同的行呢?也就是提取(1,5)和(2,6).因为数据量很大,循环做耗费时间,有没有好点的方法?
libingfei
这个根据你数据情况不同不同。
假设你的目标,仅仅是提取,b中和a相同的行。
b[duplicated(rbind(a,b))[-c(1:nrow(a)),],]
此方法消耗内存较多,是一种较快的方法。
但是,这也不是最快的。
具有针对性的高速数据处理手段,需要深入研究你的数据量级、结构、应用场景。
batteryhp
非常感谢耐心解答!
假如现在b中本身就有重复的行,比如
a
[,1] [,2]
[1,] 4 8
[2,] 1 5
[3,] 3 7
[4,] 2 6
b
[,1] [,2]
[1,] 1 5
[2,] 2 6
[3,] 3 0
[4,] 3 0
那么用duplicated函数时,(3,0) 也会被提取出来,而(3,0)并不是a和b相同的行,这样如何为处理呢?另外,有没有关于处理矩阵匹配方面好的函数或者包呢?谢谢。
libingfei
方法很多,若是对位置信息无要求,可以先对a,b分别去重再使用这个方法。
b[duplicated(rbind(a,b))[-c(1:nrow(a)),],]
另外,若是重复数据到达一定量级,分别去重后再计算会快很多。
我记得的大概如下几个
plyr包里有join函数,能满满足绝大多数链接需求。速度不高
%in%对比筛选时很常用。
sqldf可以使用,不过效率貌似不高。