使用R提取特定行

时间:2013-11-18 10:20:02

标签: r genetics

我有一个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在表中没有匹配。我尝试过使用合并功能,但没有成功,似乎在一个组中多次包含同一个人。

2 个答案:

答案 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