1

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

>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,因此应检查 y 中在ID! 中的那些元素。

最后像集群或组一样打印它们,其中每个组/集群 ID 具有相同TF的 . 问题是,在 mydata 中有相同的 ID,但TF. 有人可以帮我在 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
4

2 回答 2

1

尝试这个:

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

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

于 2013-09-24T04:36:17.287 回答
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]
于 2013-09-24T06:01:33.363 回答