我有一个ID的向量,用于描述组的成员资格。每个ID在列表中只出现一次。
示例:
GO:0006169
GO:0032238
GO:0046086
GO:0006154
GO:0046085
GO:0004001
我还有一个表(3列,74985行,没有标题),包含V1中的个人ID(记录为数字),V2中的组ID。以及V3中该组的简短描述。
示例:
1 GO:0003674 molecular_function
1 GO:0005576 extracellular region
1 GO:0008150 biological_process
2 GO:0001869 negative regulation of complement activation, lectin pathway
2 GO:0004867 serine-type endopeptidase inhibitor activity
2 GO:0005515 protein binding
每个人都可以属于多个团体,每个团体中可以有多个人。在示例中,个人1在组GO:0003674, GO:0005576 and GO:0008150
中。
我想从表中提取并保留组ID与组ID向量匹配的每一行(也就是每组)。第一个向量中的某些ID在表中没有匹配。我尝试过使用合并功能,但没有成功,似乎在一个组中多次包含同一个人。
答案 0 :(得分:3)
我想用表格表示数据框 - 如果没有,只需转换并使用names()
调整列名称或改为使用索引。
使用which()
查找df中的索引,然后使用这些索引来提取适当的行:
> df <- data.frame(g=1:10,v=1:10)
> v <- c(3,4,7,33)
> df[df$g %in% v,]
g v
3 3 3
4 4 4
7 7 7
另一种选择是使用sqldf
,然后使用SQL处理数据帧,如表格。
答案 1 :(得分:2)
使用merge
:
#dummy - GO dataframe
df1 <- read.table(text="GO:0006169
GO:0032238
GO:0046086
GO:0006154
GO:0046085
GO:0004001",col.names=c("GO_ID"))
#dummy - sample
df2 <- read.table(text="
1 GO:0003674 molecular_function
1 GO:0046086 extracellular_region
1 GO:0008150 biological_process
1 GO:0046085 xxx
2 GO:0046085 negative_xx_lectinpathway
2 GO:0004867 serine-type_endopeptidase_inhibitor
2 GO:0005515 protein_binding",col.names=c("Sample_ID","GO_ID","Description"))
#output
merge(df1,df2)
#GO_ID Sample_ID Description
#1 GO:0046085 1 xxx
#2 GO:0046085 2 negative_xx_lectinpathway
#3 GO:0046086 1 extracellular_region