在R中相交多个数据集

时间:2016-02-25 20:26:35

标签: r dataset concatenation multiple-columns intersect

如何在多个样本之间进行交叉?

我根据基因名称,cc变化,坐标建立了29个连接列表。每个清单长400-800。我需要构建一个表格,显示所有812种组合在两个列表中共享的变体数量。有没有办法在R中做到这一点?

例如:如果我有4个列表。

A<-c("TSC22112517","SLC141T43309911","RAD51D33446609","WRN31024638")

B<-c("TSC22112517","SLC14A143309911","RHBDF274474996","WRN31024638")

C<-c("TSC22112517","SLC14A143309911","RAD51D33446609","MEN164575556")

D<-c("FANCM45665468","SLC14A143309911","RAD51D33446609","MEN164575556")

我只需要找到彼此之间有多少变体。

AB<-length(intersect(A,B))

给我A和B共享的#变种#3。 然后我可以得到一张如下表所示的共享变体#:

    A      B      C      D
A   4      3      2      2
B   3      4      3      2
C   2      3      4      2
D   2      2      2      4

如何为大量列表执行此操作? 我有29个列表,每个列表有600个变种。

2 个答案:

答案 0 :(得分:0)

你可以尝试这样的事情:我在列表中做了很多事情......

#x is your data in list() format
shared<-list()
for (i in 1:29){
  shared[[i]]<-list()
   for (j in 1:29){
    if (i != j){
      shared[[i]][[j]]<-x[[i]][x[[i]][,2]==x[[j]][,2]]
    }
  }
}

答案 1 :(得分:0)

很高兴弄清楚

x<- list()
shared<-matrix(1:841,ncol=29)
temp<-NULL
for (i in 1:29){
  for (j in 1:29){
   temp[j] <- length(intersect(x[[i]][[1]],x[[j]][[1]]))
  }
  shared[,i] <- matrix(temp)
}
shared