温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

R语言中根据数据框的顺序进行筛选的示例分析

发布时间:2021-11-22 09:50:59 阅读:312 作者:柒染 栏目:大数据
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

本篇文章给大家分享的是有关R语言中根据数据框的顺序进行筛选的示例分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

目的

这里有两个数据框,两者有相同的列(ID),这里想把第一个数据框,按照第二个数据框的ID列进行提取,顺序和第二个数据框一致。

数据框1

> tt = data.frame(id = 1:10,y = rnorm(10))> tt   id          y1   1  0.72649992   2 -1.38170183   3 -0.86267034   4  2.06637565   5  0.19972536   6  0.59684977   7 -0.88368478   8  2.22246439   9 -1.582525010 10 -0.1530456
   

数据框2

> id = data.frame(id = c(2,1,5,4,3))> id  id1  22  13  54  45  3
   

错误的方法:用%in%进行提取,会自动排序

> # 使用 %in% 进行匹配时,会自动排序,不是id的顺序> tt[tt$id %in% id$id,]  id          y1  1  0.72649992  2 -1.38170183  3 -0.86267034  4  2.06637565  5  0.1997253> id  id1  22  13  54  45  3
 

可以看到,匹配后的顺序为1,2,3,4,5,而不是原来的2,1,5,4,3

 

正确的方法:用match记录位置,然后根据位置提取

> # 使用match可以达到目的> loc = match(id$id,tt$id)> loc[12 1 5 4 3> tt[loc,]  id          y2  2 -1.38170181  1  0.72649995  5  0.19972534  4  2.06637563  3 -0.8626703
   

结论:match真香

「完整代码:」

# 模拟两个数据框tt = data.frame(id = 1:10,y = rnorm(10))ttid = data.frame(id = c(2,1,5,4,3))id# 使用 %in% 进行匹配时,会自动排序,不是id的顺序tt[tt$id %in% id$id,]id# 使用match可以达到目的loc = match(id$id,tt$id)loctt[loc,]

我的翻车记录

本来我是有两个系谱文件,第一个系谱文件比较多,但是有错误。第二个系谱文件是第一个系谱文件的子集,它的系谱是正确的。我想将第一个系谱文件错误的系谱矫正一下。

「我的思路:」

1,用%in%将第一个系谱的ID,根据第二个系谱的ID提取出来,然后用第二个系谱的Sire和Dam把第一个系谱相应的IID的Sire和Dam替换掉。如果第二个系谱本身是排序的,那么这样操作是没问题的。

「潜在的bug」

如果第二个系谱不是按顺序排的,那么上面的操作就会有错误。比如类似(2,1,4,3,5),在匹配后的顺序是(1,2,3,4,5),你用(1,2,3,4,5)的父母本,替换为(2,1,5,3,5)的父母本,肯定是错误的。

以上就是R语言中根据数据框的顺序进行筛选的示例分析,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

原文链接:https://my.oschina.net/u/4592498/blog/4474412

AI

开发者交流群×