前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言 | 根据数据框的顺序进行筛选

R语言 | 根据数据框的顺序进行筛选

作者头像
邓飞
发布2020-08-07 00:02:33
2K0
发布2020-08-07 00:02:33
举报
文章被收录于专栏:育种数据分析之放飞自我

目的

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

数据框1

代码语言:javascript
复制
> tt = data.frame(id = 1:10,y = rnorm(10))
> tt
   id          y
1   1  0.7264999
2   2 -1.3817018
3   3 -0.8626703
4   4  2.0663756
5   5  0.1997253
6   6  0.5968497
7   7 -0.8836847
8   8  2.2224643
9   9 -1.5825250
10 10 -0.1530456

数据框2

代码语言:javascript
复制
> id = data.frame(id = c(2,1,5,4,3))
> id
  id
1  2
2  1
3  5
4  4
5  3

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

代码语言:javascript
复制
> # 使用 %in% 进行匹配时,会自动排序,不是id的顺序
> tt[tt$id %in% id$id,]
  id          y
1  1  0.7264999
2  2 -1.3817018
3  3 -0.8626703
4  4  2.0663756
5  5  0.1997253
> id
  id
1  2
2  1
3  5
4  4
5  3

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

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

代码语言:javascript
复制
> # 使用match可以达到目的
> loc = match(id$id,tt$id)
> loc
[1] 2 1 5 4 3
> tt[loc,]
  id          y
2  2 -1.3817018
1  1  0.7264999
5  5  0.1997253
4  4  2.0663756
3  3 -0.8626703

结论:match真香

「完整代码:」

代码语言:javascript
复制
# 模拟两个数据框
tt = data.frame(id = 1:10,y = rnorm(10))
tt
id = 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)
loc
tt[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)的父母本,肯定是错误的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 育种数据分析之放飞自我 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目的
    • 数据框1
      • 数据框2
      • 错误的方法:用%in%进行提取,会自动排序
        • 正确的方法:用match记录位置,然后根据位置提取
        • 结论:match真香
        • 我的翻车记录
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档