1. 程式人生 > >fread 讀取檔案時 數字按照因素進行讀取的方法 colClasses = "Levels"

fread 讀取檔案時 數字按照因素進行讀取的方法 colClasses = "Levels"

背景

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

完美解決問題