我有两个矩阵,如下所示:
A
ColumnA ColumnB ColumnC ColumnD A D N F DF N A S P F K l qw AS O W n H Q D E
B
ColumnA ColumnB ColumnC ColumnD A DH K FS np N A S AS Q O lm P n N WE AS PV Q NQ E
我想要一个第三个矩阵C,它在两个矩阵之间逐列包含公共元素。 我尝试使用R来完成这项工作,但似乎不可能,因为两个矩阵太大了:~5000行和1500列。两个矩阵的列数相同,列名相同。
有人能帮帮我吗?
最佳
期望的输出: ç
ColumnA ColumnB ColumnC ColumnD A N N S P AS A Q n K E O
答案 0 :(得分:2)
你可以尝试
library(stringi)
#Here `A` and `B` are "data.frames"
m1 <- stri_list2matrix( Map(`intersect`, A, B), fill='')
C <- setNames(as.data.frame(m1, stringsAsFactors=FALSE), colnames(A))
C
# ColumnA ColumnB ColumnC ColumnD
# 1 A N N S
# 2 P AS A Q
# 3 n K E
# 4 O
或者
lst <- lapply(rbind(A,B), function(x) x[duplicated(x)& x!=''] )
m2 <- sapply(lst, `length<-`, max(sapply(lst, length)))
m2[is.na(m2)] <- ''
as.data.frame(m2, stringsAsFactors=FALSE)
# ColumnA ColumnB ColumnC ColumnD
#1 A N K S
#2 P n A Q
#3 AS O E
#4 N
答案 1 :(得分:0)
你知道如何使用sqlite吗?
在sqlite中,您可以尝试类似
的内容SELECT DISTINCT newtable
FROM A
WHERE newtable Not IN (SELECT DISTINCT newtable FROM B)
创建.db文件太麻烦了
注意:如果你正在运行linux,你已经安装了sqlite或sqlite3