2016-03-01 39 views
2

我想將字符列從數據框轉換爲數字。但是,我得到的結果是四捨五入的值。as.numeric正在舍入值

無論我通過研究其他同樣性質的問題而嘗試過的東西,都不適合我。我檢查了我想要轉換的列向量的類,它是一個字符,而不是一個因素。

這裏是我的代碼片段:

some_data <- read.csv("file.csv", nrows = 100, colClasses = c("factor", "factor", "character", "character")) 
y <- Vectorize(function(x) gsub("[^\\.\\d]", "", x, perl = TRUE)) 
some_data$colC <- y(data1$colC) 
data1$colD <- y(data1$colCD) 

data1$colC <- as.numeric(data1$colC) 
data1$colD <- as.numeric(data1$colD) 

編輯:

> dput(head(data1)) 
structure(list(colA = structure(c(2L, 2L, 5L, 6L, 5L, 6L), .Label = c("(Other)", 
"Direct", "Display", "Email", "Organic Search", "Paid Search", 
"Referral", "Social Network"), class = "factor"), colB = structure(c(1L, 
2L, 2L, 2L, 1L, 1L), .Label = c("No", "Yes"), class = "factor"), 
colC = c("4023107.87", "3180863.42", "2558777.81", "2393736.25", 
"1333148.48", "1275627.13"), colD = c("49731596.35", "33604210.26", 
"20807573.12", "20061467.30", "10488358.77", "10442249.09" 
)), .Names = c("colA", "colB", "colC", "colD"), row.names = c(NA, 
6L), class = "data.frame") 
+0

我試圖重現你的問題,但我沒有'file.csv' – cory

+1

你能提供一個可重複的例子嗎?描述中的read.csv()不提供關於您的數據的任何信息 – fhlgood

+1

請嘗試使您的示例具有可重現性。也許只是顯示'dput(head(data1))' – Frank

回答

0

我覺得這是一個問題的表示,不是實際的四捨五入問題...

options("digits") ## 7 

?options

'digits':控制打印數字值時要打印的位數。這只是一個建議。有效值是 1 ... 22與默認7.看看「print.default」約 值大於15

digits可復位或者在一次性的基礎上,即print(object,digits=...)更大的說明,或全球範圍內,即options(digits=20)(20可能是矯枉過正,但可以幫助你看到發生了什麼:根據下面的結果,10可能會滿足您的需求以及)

as.numeric(data1$colC) 
[1] 4023108 3180863 2558778 2393736 1333148 1275627 
print(as.numeric(data1$colC),digits=10) 
[1] 4023107.87 3180863.42 2558777.81 2393736.25 1333148.48 1275627.13 
print(as.numeric(data1$colC),digits=20) 
[1] 4023107.8700000001118 3180863.4199999999255 2558777.8100000000559 
[4] 2393736.2500000000000 1333148.4799999999814 1275627.1299999998882 
+0

我剛剛檢查過它,你好像是正確的@Ben。謝謝。 畢竟沒有什麼不對。我很抱歉。 –