在R中实现简单的数据库搜索

时间:2013-09-24 03:25:07

标签: r

我有像流动一样的大数据集,我想对此进行简单的搜索:

>mydata

    ID              TF

    hsa-let-7a-1    SRF
    hsa-let-7a-1    PPARG
    hsa-let-7a-2    AREB6
    hsa-let-7a-3    1-Oct
    hsa-let-7a-3    SRF
    hsa-let-7a-3    PPARG
    hsa-let-7b      SRF
    .               .
    .               .
    .               .

问题:对于给定的y<- c("hsa-let-7a-3","hsa-let-7a-1","hsa-let-7b"...),找到y中具有相同TF的mydata元素。 y中的某些元素可能不在ID中,因此检查应该是ID中的y元素!

最后将它们打印为群集或组,其中每个组/群集ID中的TF相同。 问题是,在mydata中存在具有不同TF的相同ID。 任何人都可以帮我在R中实现这个吗? 我希望来自示例的输出是(输出中的所有ID都在y中,但并非y中的所有元素都在ID中!):

            ID                TF

>group1       hsa-let-7a-1      SRF
              hsa-let-7a-3      SRF
              hsa-let-7b        SRF

>group2       hsa-let-7a-1      PPARG
              hsa-let-7a-3      PPARG

2 个答案:

答案 0 :(得分:1)

试试这个:

out <- subset(mydata, ID %in% y)
out <- split(out, out$TF)
out <- out[sapply(out, nrow) > 1]

它会返回一个data.frames列表,每TF个匹配两个或更多匹配。

答案 1 :(得分:1)

您还可以使用data.table

library(data.table)
mydata<-data.table(mydata)
#order by TF
setkey(mydata,TF)
# Subset data where ID is in y, by group, where each group has more than 1 rows:
z<-mydata[ID %in% y,]
s<-z[,.N>1,by = TF]
#The output of s will be like:
      TF    V1
1: 1-Oct FALSE
2: PPARG  TRUE
3:   SRF  TRUE
# Get output by group
z[TF %in% s[V1==T]$TF]