Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >R语言 | 根据数据框的顺序进行筛选

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

作者头像
邓飞
发布于 2020-08-06 16:02:33
发布于 2020-08-06 16:02:33
2.1K00
代码可运行
举报
运行总次数:0
代码可运行

目的

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

数据框1

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> 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
代码运行次数:0
运行
AI代码解释
复制
> id = data.frame(id = c(2,1,5,4,3))
> id
  id
1  2
2  1
3  5
4  4
5  3

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> # 使用 %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
代码运行次数:0
运行
AI代码解释
复制
> # 使用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
代码运行次数:0
运行
AI代码解释
复制
# 模拟两个数据框
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
育种中如何检查系谱是否有错误
这里推荐我写的R包learnasreml中的check_pedigree函数,简单好用,结果友好。能够检查:
邓飞
2021/12/12
3.3K0
十二、R语言的综合应用
[1] "The birch canoe slid on the smooth planks."
叮当猫DDM
2023/03/01
3.2K0
单性状动物模型矩阵形式计算BLUP值
首先, 将系谱进行一下转换, 使用nadiv的prepPed函数, 预处理. 它会自动不齐没有亲本的个体, 变为NA.
邓飞
2020/09/04
1K0
单性状动物模型矩阵形式计算BLUP值
如何利用系谱计算近交系数和亲缘关系系数
近交系数: 近交系数(inbreeding coefficient)是指根据近亲交配的世代数,将基因的纯化程度用百分数来表示即为近交系数,也指个体由于近交而造成异质基因减少时,同质基因或纯合子所占的百分比也叫近交系数,个体中两个亲本的共祖系数。
邓飞
2019/12/06
5.6K4
如何利用系谱计算近交系数和亲缘关系系数
R语言 数据框、矩阵、列表的创建、修改、导出
数据框来源主要包括用代码新建(data.frame),由已有数据转换或处理得到(取子集、运算、合并等操作),读取表格文件(read.csv,read.table等)及R语言内置数据
Magnolia
2023/01/06
8.4K0
R语言综合应用
i :代称,比如第一次循环则代表in后面向量的第一个元素;第二次则为第二个元素,直到完成in后面向量里所有元素的循环为止。如in后面的向量有8个元素,则8次循环。
用户10758803
2024/03/04
1440
R语言中的apply函数族
apply函数族是R语言中数据处理的一组核心函数,通过使用apply函数,我们可以实现对数据的循环、分组、过滤、类型控制等操作。但是,由于在R语言中apply函数与其他语言循环体的处理思路是完全不一样的,所以apply函数族一直是初学者玩不转的一类核心函数。很多R语言新手,写了很多的for循环代码,也不愿意多花点时间把apply函数的使用方法了解清楚,最后把R代码写的跟C似得。
阿凡亮
2020/04/13
4.6K0
R语言快速入门上手
    较早之前就听说R是一门便捷的数据分析工具,但由于课程设计的原因,一直没有空出足够时间来进行学习。最近自从决定本科毕业出来找工作之后,渐渐开始接触大数据行业的技术,现在觉得是时候把R拿下了;用了3天时间,除了对R先有一个大概认识之外,也着手敲指令。由于计算机专业的底子还不错,而且先后接触过不下10种编程语言,感觉R语言入门上手还是挺简单的。下面是自己汇总的一些简单入门代码供大家参考,感兴趣的朋友也可逐行敲打测试。
云海谷天
2022/08/09
8790
生信技能树DAY 3 R语言入门
用户11064093
2024/04/12
3100
Pandas 2.2 中文官方教程和指南(三)
要使Name列中的每个字符串都变为小写,选择Name列(参见数据选择教程),添加str访问器并应用lower方法。因此,每个字符串都被逐个转换。
ApacheCN_飞龙
2024/05/24
3650
R语言-基础
初级统计函数 max() ,min() , mean() , median() ,var()方差 , sd()标准差 , sum()总和, length(x) # 长度(x中元素的个数), unique(x) #去重复(第一次出现不为重复,第二次出现为重复),duplicated(x)#检查重复值 , table(x) 重复值(因子)统计 ,sort(x) #排序 , dim() 查看行列数, nrow()查看行数,ncol() 查看列数
用户10331357
2023/04/26
1.6K0
全基因组选择介绍及实践-2:构建H矩阵
H矩阵作为一步法的入门技术, 是需要掌握的, 本文以一篇文献为例, 介绍如何从头构建H矩阵. 文章包括H矩阵推导过程和代码实现.
邓飞
2019/06/13
1.2K0
R语言-专题
1.字符串图片1.str_length图片x <- "The birch canoe slid on the smooth planks."x### 1.检测字符串长度str_length(x)length(x) #返回字符串的个数2.str_splitsplit返回列表,但是列表不能进行计算,对列表进行取子集### 2.字符串拆分str_split(x," ")x2 = str_split(x," ")[[1]];x2y = c("jimmy 150","nicker 140","tony 152")st
yurric
2023/02/07
1.7K0
生信入门马拉松之R语言基础-数据框、函数(Day 3)
坑:rnorm(10,mean = 0,sd = 18)rnorm(10,mean = 0,sd = 18)<(-2) :[]中和[]外是两个向量。
Crazy_George
2024/04/13
3020
生信技能树-R语言-day3
文件名$列名 = c()赋值修改后的向量($提取的是一个全新的列名,之前不存在的)
VOHOKO
2024/04/19
1430
R语言的数据结构与转换
任何数据分析的第一步都是按照所需要的格式创建数据集。在 R 中,这个任务包括两个步骤:首先选择一种数据结构来存储数据,然后将数据输入或者导入这个数据结构中。下面介绍 R 中用于存储数据的多种数据结构。
timerring
2023/10/13
7430
R语言的数据结构与转换
从零开始的异世界生信学习 R语言部分 06 R应用专题
一、玩转字符串 stringr包 图片 1.str_length() 检测字符串长度 x <- "The birch canoe slid on the smooth planks." x ### 1.检测字符串长度 str_length(x) #计算字符串中有多少字符 length(x) #计算向量中元素的个数 图片 图片 2. str_split 字符串拆分 x <- "The birch canoe slid on the smooth planks." x ### 2.字符串拆分 str_sp
用户10361520
2023/03/07
2.6K0
R语言 常见函数知识点梳理与解析 | 精选分析
R语言 控制流:for、while、ifelse和自定义函数function|第5讲
1480
2019/07/22
2.4K0
R语言 常见函数知识点梳理与解析 | 精选分析
Day07 生信马拉松-数据整理中的R
step1 对matrix进行转置:使gene名变为列名,将样本名转化为data.frame中的第一列
大冬仔
2023/08/16
3820
快速掌握R语言中类SQL数据库操作技巧
在数据分析中,往往会遇到各种复杂的数据处理操作:分组、排序、过滤、转置、填充、移动、合并、分裂、去重、找重、填充等操作。这时候R语言就是一个很好的选择:R可以高效地、优雅地解决数据处理操作。(本章节为R语言入门第二部分总结篇:数据操作)
1480
2019/09/25
5.8K0
快速掌握R语言中类SQL数据库操作技巧
相关推荐
育种中如何检查系谱是否有错误
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验