簡體   English   中英

用R中的另一個數據集過濾數據集

[英]Filtering a Dataset by another Dataset in R

我要完成的任務實際上是通過“ id”列中的條目通過另一個數據集中的條目過濾一個數據集。 我正在使用的數據集非常大,有十萬個條目和三十個左右的變量。 我制作了玩具數據集來幫助解釋我想做什么。

第一個數據集包含一個條目列表,每個條目都有自己的唯一登錄號(這是ID)。

Data1 = data.frame(accession_number = c('a','b','c','d','e','f'), values =c('1','3','4','2','3','12'))
>Data1
      accession_number values
1                a      1
2                b      3
3                c      4
4                d      2
5                e      3
6                f     12

我只對登錄號為“ c”,“ d”和“ e”的條目感興趣。 (實際上,盡管我的名單大約有100個唯一的加入號)。 接下來,我創建了一個僅包含唯一登錄號而沒有其他值的數據框。

>SubsetData1
  accession_number
1                c
2                d
3                e

我希望過濾的第二個數據集包含多個條目,其中一些具有相同的登錄號。

>Data2
   accession_number values  Intensity col4       col6
1                 a      1 -0.0251304    a -0.4816370
2                 a      2 -0.4308735    b -1.0335971
3                 c      3 -1.9001321    c  0.6416735
4                 c      4  0.1163934    d -0.4489048
5                 c      5  0.7586820    e  0.5408650
6                 b      6  0.4294415    f  0.6828412
7                 b      7 -0.8045201    g  0.6677730
8                 b      8 -0.9898947    h  0.3948412
9                 c      9 -0.6004642    i -0.3323932
10                c     10  1.1367578    j  0.9151915
11                c     11  0.7084980    k -0.3424039
12                c     12 -0.9618102    l  0.2386307
13                c     13  0.2693441    m -1.3861064
14                d     14  1.6059971    n  1.3801924
15                e     15  2.4166472    o -1.1806929
16                e     16 -0.7834619    p  0.1880451
17                e     17  1.3856535    q -0.7826357
18                f     18 -0.6660976    r  0.6159731
19                f     19  0.2089186    s -0.8222399
20                f     20 -1.5809582    t  1.5567113
21                f     21  0.3610700    u  0.3264431
22                f     22  1.2923324    v  0.9636267

我想做的是將第一個數據集(SubsetData1)的子集列表與第二個數據集(Data2)進行比較,以創建一個過濾后的數據集,該數據集僅包含在子集列表中定義的具有相同登錄號的條目。 過濾后的數據集應如下所示。

   accession_number values  Intensity col4       col6
9                 c      9 -0.6004642    i -0.3323932
10                c     10  1.1367578    j  0.9151915
11                c     11  0.7084980    k -0.3424039
12                c     12 -0.9618102    l  0.2386307
13                c     13  0.2693441    m -1.3861064
14                d     14  1.6059971    n  1.3801924
15                e     15  2.4166472    o -1.1806929
16                e     16 -0.7834619    p  0.1880451
17                e     17  1.3856535    q -0.7826357

我不知道是否需要開始制作循環以解決此問題,或者是否有簡單的R命令可以幫助我完成此任務。 任何幫助深表感謝。

謝謝

嘗試這個

WantedData=Data2[Data2$ccession_number %in% SubsetData1$accession_number, ]

subset功能設計用於基本子集:

subset(Data2,accession_number %in% SubsetData1$accession_number)

或者,您可以在此處merge

merge(Data2,SubsetData1)

其他解決方案看起來不錯,但是我喜歡dplyr的可讀性,所以這里是dplyr解決方案。

library(dplyr)
new_dataset <- Data2 %>%
    filter(accession_number %in% SubsetData1$accession_number)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM