gpt4 book ai didi

r - 如何使用高级字符串匹配对数据进行子集化

转载 作者:行者123 更新时间:2023-12-04 01:54:49 24 4
gpt4 key购买 nike

我有以下数据框,我想根据匹配的字符串从中提取行。

> GEMA_EO5
gene_symbol fold_EO p_value RefSeq_ID BH_p_value
KNG1 3.433049 8.56e-28 NM_000893,NM_001102416 1.234245e-24
REXO4 3.245317 1.78e-27 NM_020385 2.281367e-24
VPS29 3.827665 2.22e-25 NM_057180,NM_016226 2.560770e-22
CYP51A1 3.363149 5.95e-25 NM_000786,NM_001146152 6.239386e-22
TNPO2 4.707600 1.60e-23 NM_001136195,NM_001136196,NM_013433 1.538000e-20
NSDHL 2.703922 6.74e-23 NM_001129765,NM_015922 5.980454e-20
DPYSL2 5.097382 1.29e-22 NM_001386 1.062868e-19

所以我想提取例如两行基于 $RefSeq_ID 中的匹配字符串,适用于以下内容:
> list<-c("NM_001386", "NM_020385")
> GEMA_EO6<-subset(GEMA_EO5, GEMA_EO5$RefSeq_ID %in% list, drop = TRUE)

> GEMA_EO6

gene_symbol fold_EO p_value RefSeq_ID BH_p_value
REXO4 3.245317 1.78e-27 NM_020385 2.281367e-24
DPYSL2 5.097382 1.29e-22 NM_001386 1.062868e-19

但是有些行有几个用逗号分隔的 RefSeq_ID,所以我正在寻找一种通用方法来判断 $RefSeq_ID 是否包含某个字符串模式,然后对该行进行子集化。

最佳答案

要进行部分匹配,您需要使用正则表达式(请参阅 ?grepl )。这是您的特定问题的解决方案:

##Notice that the first element appears in 
##a row containing commas
l = c( "NM_013433", "NM_001386", "NM_020385")

要一次测试一个序列,我们只需选择一个特定的 seq id:
R> subset(GEMA_EO5, grepl(l[1], GEMA_EO5$RefSeq_ID))
gene_symbol fold_EO p_value RefSeq_ID BH_p_value
5 TNPO2 4.708 1.6e-23 NM_001136195,NM_001136196,NM_013433 1.538e-20

为了测试多个基因,我们使用 |运算符(operator):
R> paste(l, collapse="|")
[1] "NM_013433|NM_001386|NM_020385"
R> grepl(paste(l, collapse="|"),GEMA_EO5$RefSeq_ID)
[1] FALSE TRUE FALSE FALSE TRUE FALSE TRUE

所以
subset(GEMA_EO5, grepl(paste(l, collapse="|"),GEMA_EO5$RefSeq_ID))

应该给你你想要的。

关于r - 如何使用高级字符串匹配对数据进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12837462/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com