通过 R 中的另一个数据集过滤数据集
Filtering a Dataset by another Dataset in R
我要完成的任务实质上是通过 "id" 列中的条目通过另一个数据集中的条目过滤一个数据集。我正在使用的数据集非常大,有 10 个条目和 30 个左右的变量。我制作了玩具数据集来帮助解释我想做什么。
第一个数据集包含一个条目列表,每个条目都有自己唯一的登录号(这是 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 命令可以帮助我完成这个任务。非常感谢任何帮助。
谢谢
subset
函数专为基本子集化而设计:
subset(Data2,accession_number %in% SubsetData1$accession_number)
或者,您可以在这里 merge
:
merge(Data2,SubsetData1)
试试这个
WantedData=Data2[Data2$ccession_number %in% SubsetData1$accession_number, ]
其他解决方案似乎不错,但我喜欢 dplyr
的可读性,所以这里有一个 dplyr
解决方案。
library(dplyr)
new_dataset <- Data2 %>%
filter(accession_number %in% SubsetData1$accession_number)
您也可以使用 dplyr
包的 inner_join
。
dat = inter_join(Data2, SubsetData1)
我要完成的任务实质上是通过 "id" 列中的条目通过另一个数据集中的条目过滤一个数据集。我正在使用的数据集非常大,有 10 个条目和 30 个左右的变量。我制作了玩具数据集来帮助解释我想做什么。
第一个数据集包含一个条目列表,每个条目都有自己唯一的登录号(这是 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 命令可以帮助我完成这个任务。非常感谢任何帮助。
谢谢
subset
函数专为基本子集化而设计:
subset(Data2,accession_number %in% SubsetData1$accession_number)
或者,您可以在这里 merge
:
merge(Data2,SubsetData1)
试试这个
WantedData=Data2[Data2$ccession_number %in% SubsetData1$accession_number, ]
其他解决方案似乎不错,但我喜欢 dplyr
的可读性,所以这里有一个 dplyr
解决方案。
library(dplyr)
new_dataset <- Data2 %>%
filter(accession_number %in% SubsetData1$accession_number)
您也可以使用 dplyr
包的 inner_join
。
dat = inter_join(Data2, SubsetData1)