R語言數值取消科學計數法表示的操作
我就廢話不多說瞭,大傢還是直接看代碼吧~
>#取消科學計數法 >options(scipen = 200) >#scipen 表示在200個數字以內都不使用科學計數法
補充:R語言去除科學計數法 保留小數位
R語言 去除科學計數法 保留小數位
options(“scipen”=100, “digits”=4)
補充:R語言科學計數法數據改變/丟失/失準,取消科學計數法的原因和解決方法
問題描述
如何在R中取消科學計數法 &
對R中使用科學技術法表示的數據“取消科學計數法”以後,得到的值和原來的值會不一樣。
需求背景
分析留存數據時,數據庫底表的字段是一個30位/兩百位的字符串,比如0011111100000000000001,第一個0表示最近一天該用戶沒登陸,第三位的1表示3天前該用戶登陸瞭,以此類推
底表的格式是字符串,但我下載格式是csv,csv自動把這個字段的格式改成數值型瞭(我也不知道為啥),所以我用R讀取這個文件時,“0011111100000000000001“就變成瞭”11111100000000000001“,我需要在前面補0補滿30位
然而,補0的函數要求輸入的格式是字符串,但我直接把原始數據轉成字符串格式的話會發生下面這樣尷尬的情況,比如原始數據是“11111111111111111111111111111111111”,那麼R就會顯示1.11+e30,然後轉成character 類型以後就直接變成“1.11+e30”,補0以後就會是“000001.1111e+30”(類似這樣,反正就是還有小數點和e等字樣)
所以,我需要先取消科學計數法的表示,然後再轉成字符串格式。
取消科學計數法的方法一
在讀取或處理數據前使用options函數
#取消科學計數法 options(scipen = 200) #scipen 表示在200位數字以內都不使用科學計數法
取消科學計數法的方法二
在讀取或處理數據時使用format函數
#取消科學計數法 format(data, scientific=F) # data即處理的數據字段
後續的bug
用上面的方法一或者二以後,確實不是科學計數法瞭,可得到的值和原來的值會不一樣,如:
>a <-123456789987654321123456 >a [1] 1.234568e+23 >format(a,scientific=F) [1] “123456789987654325240268” >format(a,scientific=F,digits=14) [1] “123456789987654325240268” >format(a,scientific=F,digits=7) [1] “123456789987654325240268”
原因
對於很大的數(比如10^20量級),R的儲存不會保留全部精度,而是保留部分精度(比如前15位),忽略剩餘精度(比如後5位)
解決方法
(1)最好就是從源頭解決問題,一開始拉取數據的時候就拉成文本格式,不要是數值格式,比如從SQL數據庫裡拉原始數據的時候就用SQL指令把那行很大的數改成文本格式。
(2)用其他軟件如excel的導入數據功能,把原本數值格式的數據在導入時就改成文本格式,保存以後,再用R讀寫新文件
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。
推薦閱讀:
- None Found