R语言使用dbplyr::filter循环匹配数据

1 篇文章 0 订阅
1 篇文章 0 订阅
在R语言中,使用dbplyr::filter从数据集中提取特定行时,循环体内可能会遇到数据匹配错误,表现为不同迭代步骤得到的结果相同。问题可能源于缓存或延迟计算。解决方法包括使用which()函数直接索引,或者在filter()中引用外部变量。确保每次迭代时filter()接收的是当前迭代的变量值。
摘要由CSDN通过智能技术生成

关于R语言循环体内匹配数据遇到的问题


使用dbplyr::filter遇到了问题
在循环体内进行数据匹配是最常见的,具体也就是:数据赋值给变量dat

在这里插入图片描述

从表中提取出Enhancer_ID为10:13200624-13201003的行,dbplyr处理数据使用的filter函数在进行数据匹配时,非常好用,那dbplyr::filter在此处的用法是:

dat %>% dbplyr::filter(Enhancer_ID=="10:13200624-13201003")

能够得到想获取的结果:
在这里插入图片描述
但是当在循环体内使用filter时,却会遇到问题,例如:
在这里插入图片描述
使用

eh_ID_mut <- eh_mut %>% filter(Enhancer_ID==eh_ID[ii])# %>% select("Hugo_Symbol","Chromosome","Start_position","End_position","Enhancer_ID")

通过循环ii来提取文件时,会出现窜行现象,如ii=63ii=64得到的eh_ID_mut是一样的,而ii=65得到的eh_ID_mut$Enhancer_ID却是eh_ID[64]的,这在循环体内进行其他处理时会出错。
所以给出以下两点解决方案:
1.使用which()进行匹配,如此处可以用:

eh_ID_mut <- eh_mut[which(eh_mut$Enhancer_ID==eh_ID[ii]),]

2.如果仍然想在循环内使用filter(),需要将eh_ID[ii]赋值给变量,在filter里调用该变量,如:

ID <- eh_ID[ii] 
eh_ID_mut <- eh_mut %>% filter(Enhancer_ID==ID)# %>% select("Hugo_Symbol","Chromosome","Start_position","End_position","Enhancer_ID")

出现这个问题的原因,还不太清楚,若是有大佬知道,拜托在评论区解答一下!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值