首页 > 其他 > 详细

fread 读取文件时 数字按照因素进行读取的方法 colClasses =

时间:2021-06-04 22:40:40      阅读:18      评论:0      收藏:0      [点我收藏+]

背景

使用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

完美解决问题

fread 读取文件时 数字按照因素进行读取的方法 colClasses =

原文:https://blog.51cto.com/yijiaobani/2866261

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!