我想讀取第一列中有條形碼的csv文件,但是當R獲取到data.frame中時,它會將「1665535004661」轉換爲「1.67E + 12」。有沒有辦法以整數格式保存這個數字?我試着分配一個「雙」類,但那不起作用,也沒有分配一個「字符」類。一旦它處於1.67E + 12格式,任何將其轉換回整數的嘗試都會返回「167000000000」。保留大數
感謝, J--
我想讀取第一列中有條形碼的csv文件,但是當R獲取到data.frame中時,它會將「1665535004661」轉換爲「1.67E + 12」。有沒有辦法以整數格式保存這個數字?我試着分配一個「雙」類,但那不起作用,也沒有分配一個「字符」類。一旦它處於1.67E + 12格式,任何將其轉換回整數的嘗試都會返回「167000000000」。保留大數
感謝, J--
這不是在 「1.67E + 12格式」,它只是將不會完全使用默認設置打印。 R正在讀取它,並且整個數字都在那裏。
x <- 1665535004661
> x
[1] 1.665535e+12
> print(x, digits = 16)
[1] 1665535004661
看,數字一直存在。除非你有非常多的數字,否則他們不會迷路。根據您所帶入的內容進行排序可以正常工作,您只需使用digits選項顯式調用print()即可通過鍵入名稱來隱式查看data.frame。
看看在int64
包:Bringing 64-bit data to R。
有沒有辦法,只是導入它作爲一個人物?我不需要用它做數學,我只需要對它進行排序。 – James
X < - 「1665535004661」 –
嘗試colClasses = 「八字」 工作
read.csv("file.csv", colClasses = "character")
http://stat.ethz.ch/R-manual/R-devel/library/utils/html/read.table.html
看一看這個鏈接。
通過在評論中提到的內容,可以通過在read.table()
中指定colClasses
來直接將文本導入爲字符。例如:
num <- "1665535004661"
dat.char <- read.table(text = num, colClasses="character")
str(dat.char)
#------
'data.frame': 1 obs. of 1 variable:
$ V1: chr "1665535004661"
dat.char
#------
V1
1 1665535004661
備選地(和其它用途),可以options()
下指定digits
變量。默認值是7位數字,可接受的範圍是1-22。要清楚,設置此選項絕不會更改或更改基礎數據,它只是控制打印時它在屏幕上的顯示方式。從幫助頁面?options
:
controls the number of digits to print when printing numeric values. It is a suggestion only.
Valid values are 1...22 with default 7. See the note in print.default about values greater than
15.
舉例說明這一點:
options(digits = 7)
dat<- read.table(text = num)
dat
#------
V1
1 1.665535e+12
options(digits = 22)
dat
#------
V1
1 1665535004661
要設置全局設置時完全充實了這一點,考慮到案件是不可取的,您可以直接指定位數作爲參數print(foo, digits = bar)
。您可以在?print.default
下閱讀更多關於此的內容。這就是約翰在他的回答中所描述的,所以應該給他留下信息來說明這個細微差別。
從is.integer頁:
「注意的R,當前的實現方式中使用的整數向量的32位整數,因此可表示整數的範圍被限制到約+/- 2 * 10^9 ?
1665535004661L> 2 * 10^9 [1] TRUE
你要打包Rmpfr。
library(Rmpfr)
x <- mpfr(15, precBits= 1024)
由於您未對此值執行算術運算,因此字符是適當的。您可以使用colClasses參數爲每列設置不同的類,這可能比使用所有字符更好。
數據。CSV:
a,b,c
1001002003003004,2,3
讀取字符,然後整數:
x <- read.csv('test.csv',colClasses=c('character','integer','integer'))
x
a b c
1 1001002003003004 2 3
mode(x$a)
[1] "character"
mode(x$b)
[1] "numeric"
當你正在做 read.csv
您可以使用數字參數。例如:
read.csv(x, sep = ";", numerals = c("no.loss")) Where x is your data.
這將保留長整數的值,並且在導入數據時不會混淆它們的表示形式。
這基本上覆蓋我在下面討論的方法用'選項()'。作爲一個參考點,當'= print.default'中的實現開始成爲特定於平臺的問題時,應該閱讀並注意'?print.default'中的警告,因爲sprintf()的實現開始根據底層的C代碼。 – Chase
如果使用options(),情況也是如此。這只是一個輸出默認值。我認爲如果你在答案中明確了這一點,那將是最好的。因爲這是相當模糊的。試圖閱讀它天真,我想知道如果數字選項只是改變了多少數字保留,他們是如何閱讀?...什麼? – John
好點 - 編輯我的答案是更明確的。如果您認爲有必要,隨意調整。乾杯! - 追逐 – Chase