育种数据分析之放飞自我分享 http://blog.sciencenet.cn/u/yijiaobai 关注:生物统计,数量遗传,混合线性模型,生物信息,R,Perl,Python,GWAS,GS相关方法,文章及代码

博文

asreml中sln文件多性状的分解

已有 1841 次阅读 2018-9-2 11:40 |个人分类:农学统计|系统分类:科研笔记

背景

使用asreml分析数据时, 得到的是sln数据,进行多性状分析或者随机回归分析时,sln中的Level是1.001,小数点前面的1表示第一个性状,后面的001表示ID。

有时候需要将1.001分为1和001,R中的tidyverse中的separate可以分割,但是由于data.table中的fread读取时,将1.001当作数字,在分割时,1.010和1.100都分割为1,这明显是错误的。

示例

txt数据:

比如上面的数据,想将第二列分为1和1:10,但是第十行,分割结果为1!这不是我想要的。

library(data.table)
library(tidyverse)
dd <-fread("d:/test-datatable.txt")
separate(dd,2,into=c("a","b"),sep="\\.",remove = T)
# V1 a  b
# 1:  1 1 01
# 2:  2 1 02
# 3:  3 1 03
# 4:  4 1 04
# 5:  5 1 05
# 6:  6 1 06
# 7:  7 1 07
# 8:  8 1 08
# 9:  9 1 09
# 10: 10 1  1

解决方法

在fread中增加参数:colClasses = “Level”

library(data.table)
library(tidyverse)
# dd <-fread("d:/test-datatable.txt")
dd <-fread("d:/test-datatable.txt",colClasses = "Level")
dd
str(dd)
separate(dd,2,into=c("a","b"),sep="\\.",remove = T)
# V1 a  b
# 1:  1 1 01
# 2:  2 1 02
# 3:  3 1 03
# 4:  4 1 04
# 5:  5 1 05
# 6:  6 1 06
# 7:  7 1 07
# 8:  8 1 08
# 9:  9 1 09
# 10: 10 1 10

完美解决问题



https://wap.sciencenet.cn/blog-2577109-1132335.html

上一篇:基因组选择常见问题FAQ
下一篇:R语言求解混合线性方程组(无系谱)
收藏 IP: 106.39.56.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-6-4 17:04

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部