我有像流动一样的大数据集,我想对此进行简单的搜索:
>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
答案 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]