1

グループへのメンバーシップを記述する ID のベクトルがあります。各 ID はリストに 1 回だけ表示されます。

例:

GO:0006169
GO:0032238
GO:0046086
GO:0006154
GO:0046085
GO:0004001

V1 の個々の ID (数値として記録)、V2 のグループ ID を含むテーブル (3 列、74985 行、ヘッダーなし) もあります。そして、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 は group に所属して GO:0003674, GO:0005576 and GO:0008150います。

グループ ID がグループ ID のベクトルと一致するすべての行 (つまり、すべてのグループ) をテーブルから抽出して保持したいと思います。最初のベクトルの ID の一部がテーブルに一致しません。マージ機能を使用してみましたが、成功しませんでした。グループに同じ個人が複数回含まれているようです。

4

2 に答える 2

3

テーブルとはデータフレームを意味すると思います-そうでない場合は、names()代わりにインデックスを使用して列名を変換して調整するか、代わりに操作してください。

で df のインデックスを検索しwhich()、それらを使用して適切な行を抽出します。

> 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 を使用してテーブルのようなデータ フレームを使用して処理することです。

于 2013-11-18T10:27:05.107 に答える
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
于 2013-11-18T11:55:40.377 に答える