R函数在两个单独的数据框中查找匹配项?
R function to find matches in two separate dataframe?
我是 R 编程的新手,所以我搜索了很多但找不到我要找的东西。
我有两个数据框;
数据帧 1:
Accession `Gene Symbol` `siCON-1` `siCON-2` `siCON-3` `siTR-1` `siTR-2` `siTR-3` `log2(siTR/s~ p_val `-log10(t.test si~
<chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Q14258 TRIM25 2283. 2570. 2749. 489 498. 480. -2.37 1.14e-4 3.94
2 Q9P035 PTPLAD1; HACD3 1080. 857. 1060. 338. 439. 264 -1.52 1.74e-3 2.76
3 Q9NP99 TREM1 45.7 NA 65.3 55 32.7 3.2 -0.873 3.10e-1 0.508
4 P35226 BMI1; COMMD3-~ 46.3 42.6 36.1 12.3 23.7 12.6 -1.36 6.03e-3 2.22
5 Q14117 DPYS 44.9 NA 73.1 51.7 36.9 0.8 -0.985 2.79e-1 0.554
6 Q6IAN0 DHRS7B 173. 149. 213. 92.3 73.7 62.6 -1.22 7.77e-3 2.11
数据帧 2:
V1 V2 V3 V4 V5 V6
1 A0A075B6P5 R-HSA-109582 https://reactome.org/PathwayBrowser/#/R-HSA-109582 Hemostasis TAS Homo sapiens
2 A0A075B6P5 R-HSA-1280218 https://reactome.org/PathwayBrowser/#/R-HSA-1280218 Adaptive Immune System TAS Homo sapiens
3 A0A075B6P5 R-HSA-1280218 https://reactome.org/PathwayBrowser/#/R-HSA-1280218 Adaptive Immune System IEA Homo sapiens
4 A0A075B6P5 R-HSA-1643685 https://reactome.org/PathwayBrowser/#/R-HSA-1643685 Disease TAS Homo sapiens
5 A0A075B6P5 R-HSA-1643685 https://reactome.org/PathwayBrowser/#/R-HSA-1643685 Disease IEA Homo sapiens
6 A0A075B6P5 R-HSA-166658 https://reactome.org/PathwayBrowser/#/R-HSA-166658 Complement cascade TAS Homo sapiens
我只想从 table 2 中搜索 table 1 中的每个登录 ID,如果匹配,我想将 table 2 中的 V2 和 V4 复制到 table 1.
我该怎么做?提前致谢。
编辑:很抱歉造成混淆,Accession 是用于匹配的,V1 是第二个数据框中的匹配。
我想比较 'Q14258' 作为示例,从第一个数据帧到第二个数据帧 V1,如果匹配,我想从第二个数据帧获取 V2 和 V4,并在数据框 1。我希望这会清除它。
Edit2:我用过这个代码
matches <- match(dataframe1$Accession,dataframe2$V1)
我可以找到位置,但我后来卡住了。
[1] 87059 130058 126612 50691 86417 97429 80338 NA NA 34876 132613 138390 86681 48874 NA NA NA 121653 NA
[20] 83210 NA NA 22832 98354 104386 80531 11963 338 NA 58060 50032 12127 133036 11434 111307 26229 NA 89105
[39] 107669 2329 57826 NA 12101 35659 NA 100915 NA 119519 NA NA 92556 128938 13341 130104 133727 103605 NA
[58] 105145 124370 27343 NA 100357 47092 93135 39138 66942 NA 23662 116234 NA 85757 NA 125647 NA NA NA
[77] 59705 NA 109960 44700 135309 121942 NA 74508 NA NA 111882 15365 94138 122808 137613 58407 28641 NA 110505
[96] 76572 NA 104295 NA 130022 71937 63190 101249 113658 133776 36281 NA 61907 56843 NA 94265 24763 119085 81442
[115] NA NA 89343 NA NA 100597 NA 4782 131283 88704 NA NA 67450 57507 118512 10851 NA 12182 58482
当你想合并两个数据帧时,你想使用 join
。
我做了一些示例数据,因为我不确定我是否理解你在问题中的数据。我知道 df1 中的 Accession
与 df2 中的 V1
相同。
library(tidyverse)
df1 <- tribble(
~Accession, ~GeneSymbol,
'Q1', 'TRIM25',
'Q2', 'PTPLAD1',
'Q3', 'TREM1' )
df2 <- tribble(
~V1, ~V2,
'Q1', 'R-HSA-109581',
'Q2', 'R-HSA-109582',
'Q4', 'R-HSA-109583',
'Q5', 'R-HSA-109584',
'Q6', 'R-HSA-109585' )
)
如何进行连接取决于您的需要。对于 inner_join()
,结果包含 df1 和 df2 中的键 (Accession
)。
df1 %>%
inner_join(df2, by=c("Accession" = "V1"))
# A tibble: 2 x 3
Accession GeneSymbol V2
<chr> <chr> <chr>
1 Q1 TRIM25 R-HSA-109581
2 Q2 PTPLAD1 R-HSA-109582
left_join()
保留 df1 (Accession
) 中的所有键并添加 df2 中具有匹配键的列。它将 NA 用于 df1 中键的新列,而 df2 中没有匹配项。
df1 %>%
left_join(df2, by=c("Accession" = "V1"))
# A tibble: 3 x 3
Accession GeneSymbol V2
<chr> <chr> <chr>
1 Q1 TRIM25 R-HSA-109581
2 Q2 PTPLAD1 R-HSA-109582
3 Q3 TREM1 NA
还有其他类型的联接。查看 Hadley Wickham 的书中的信息 R for Data Science。
我是 R 编程的新手,所以我搜索了很多但找不到我要找的东西。
我有两个数据框;
数据帧 1:
Accession `Gene Symbol` `siCON-1` `siCON-2` `siCON-3` `siTR-1` `siTR-2` `siTR-3` `log2(siTR/s~ p_val `-log10(t.test si~
<chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Q14258 TRIM25 2283. 2570. 2749. 489 498. 480. -2.37 1.14e-4 3.94
2 Q9P035 PTPLAD1; HACD3 1080. 857. 1060. 338. 439. 264 -1.52 1.74e-3 2.76
3 Q9NP99 TREM1 45.7 NA 65.3 55 32.7 3.2 -0.873 3.10e-1 0.508
4 P35226 BMI1; COMMD3-~ 46.3 42.6 36.1 12.3 23.7 12.6 -1.36 6.03e-3 2.22
5 Q14117 DPYS 44.9 NA 73.1 51.7 36.9 0.8 -0.985 2.79e-1 0.554
6 Q6IAN0 DHRS7B 173. 149. 213. 92.3 73.7 62.6 -1.22 7.77e-3 2.11
数据帧 2:
V1 V2 V3 V4 V5 V6
1 A0A075B6P5 R-HSA-109582 https://reactome.org/PathwayBrowser/#/R-HSA-109582 Hemostasis TAS Homo sapiens
2 A0A075B6P5 R-HSA-1280218 https://reactome.org/PathwayBrowser/#/R-HSA-1280218 Adaptive Immune System TAS Homo sapiens
3 A0A075B6P5 R-HSA-1280218 https://reactome.org/PathwayBrowser/#/R-HSA-1280218 Adaptive Immune System IEA Homo sapiens
4 A0A075B6P5 R-HSA-1643685 https://reactome.org/PathwayBrowser/#/R-HSA-1643685 Disease TAS Homo sapiens
5 A0A075B6P5 R-HSA-1643685 https://reactome.org/PathwayBrowser/#/R-HSA-1643685 Disease IEA Homo sapiens
6 A0A075B6P5 R-HSA-166658 https://reactome.org/PathwayBrowser/#/R-HSA-166658 Complement cascade TAS Homo sapiens
我只想从 table 2 中搜索 table 1 中的每个登录 ID,如果匹配,我想将 table 2 中的 V2 和 V4 复制到 table 1.
我该怎么做?提前致谢。
编辑:很抱歉造成混淆,Accession 是用于匹配的,V1 是第二个数据框中的匹配。
我想比较 'Q14258' 作为示例,从第一个数据帧到第二个数据帧 V1,如果匹配,我想从第二个数据帧获取 V2 和 V4,并在数据框 1。我希望这会清除它。
Edit2:我用过这个代码
matches <- match(dataframe1$Accession,dataframe2$V1)
我可以找到位置,但我后来卡住了。
[1] 87059 130058 126612 50691 86417 97429 80338 NA NA 34876 132613 138390 86681 48874 NA NA NA 121653 NA
[20] 83210 NA NA 22832 98354 104386 80531 11963 338 NA 58060 50032 12127 133036 11434 111307 26229 NA 89105
[39] 107669 2329 57826 NA 12101 35659 NA 100915 NA 119519 NA NA 92556 128938 13341 130104 133727 103605 NA
[58] 105145 124370 27343 NA 100357 47092 93135 39138 66942 NA 23662 116234 NA 85757 NA 125647 NA NA NA
[77] 59705 NA 109960 44700 135309 121942 NA 74508 NA NA 111882 15365 94138 122808 137613 58407 28641 NA 110505
[96] 76572 NA 104295 NA 130022 71937 63190 101249 113658 133776 36281 NA 61907 56843 NA 94265 24763 119085 81442
[115] NA NA 89343 NA NA 100597 NA 4782 131283 88704 NA NA 67450 57507 118512 10851 NA 12182 58482
当你想合并两个数据帧时,你想使用 join
。
我做了一些示例数据,因为我不确定我是否理解你在问题中的数据。我知道 df1 中的 Accession
与 df2 中的 V1
相同。
library(tidyverse)
df1 <- tribble(
~Accession, ~GeneSymbol,
'Q1', 'TRIM25',
'Q2', 'PTPLAD1',
'Q3', 'TREM1' )
df2 <- tribble(
~V1, ~V2,
'Q1', 'R-HSA-109581',
'Q2', 'R-HSA-109582',
'Q4', 'R-HSA-109583',
'Q5', 'R-HSA-109584',
'Q6', 'R-HSA-109585' )
)
如何进行连接取决于您的需要。对于 inner_join()
,结果包含 df1 和 df2 中的键 (Accession
)。
df1 %>%
inner_join(df2, by=c("Accession" = "V1"))
# A tibble: 2 x 3 Accession GeneSymbol V2 <chr> <chr> <chr> 1 Q1 TRIM25 R-HSA-109581 2 Q2 PTPLAD1 R-HSA-109582
left_join()
保留 df1 (Accession
) 中的所有键并添加 df2 中具有匹配键的列。它将 NA 用于 df1 中键的新列,而 df2 中没有匹配项。
df1 %>%
left_join(df2, by=c("Accession" = "V1"))
# A tibble: 3 x 3 Accession GeneSymbol V2 <chr> <chr> <chr> 1 Q1 TRIM25 R-HSA-109581 2 Q2 PTPLAD1 R-HSA-109582 3 Q3 TREM1 NA
还有其他类型的联接。查看 Hadley Wickham 的书中的信息 R for Data Science。