2016-06-14 38 views
0

我遇到數據轉換問題。我有這個數據,我從.csv文件獲得,例如:從因子到R中的數值轉換中丟失的數據

comisiones[2850,28:30] 

     Periodo.Pago  Monto.Pago.Credito  Disposicion.En.Efectivo 

2850   Mensual   11,503.68    102,713.20 

領域Monto.Pago.Credito有一個要素數據類,我需要的是數字,但雙精度種。我需要小數。

str(comisiones$Monto.Pago.Credito) 

Factor w/ 3205 levels "1,000.00","1,000.01",..: 2476 2197 1373 1905 1348 3002 1252 95 2648 667 ... 

所以我用的是通用數據轉換功能as.numeric()

comisiones$Monto.Pago.Credito <- as.numeric(comisiones$Monto.Pago.Credito) 

但隨後的觀察更改爲:

comisiones[2850,28:30] 

     Periodo.Pago  Monto.Pago.Credito  Disposicion.En.Efectivo 

    2850  Mensual    796    102,713.20 


str(comisiones$Monto.Pago.Credito) 
num [1:5021] 2476 2197 1373 1905 1348 ... 

comisiones$Monto.Pago.Credito最大應該是11,504.68但現在是3205.

我不知道是否有特定的dat R中的小數的類或類型,我已經找到它,但它沒有工作。

+0

哎呀,我掛錯了重複的(這是在哪裏逗號被用作小數點分隔數據) –

+0

完全正確!謝謝@BenBolker – DanielYuksek

+0

相關但不完全相同http://stackoverflow.com/questions/1523126/how-to-read-data-when-some-numbers-contain-commas-as-thousand-separator –

回答

3

您需要先清理你的一列,例如刪除逗號,將其轉換爲字符,然後以數字:

comisiones$Monto.Pago.Credito <- as.numeric(gsub(",", "", comisiones$Monto.Pago.Credito)) 

的問題出現在你直接轉換的因素變量的數值。

+0

是的,那工作。謝謝 – DanielYuksek

+2

StackOverflow棄用[使用評論來說「謝謝」](http://meta.stackoverflow.com/questions/258004/should-thank-you-comments-be-flagged?lq=1);如果這個答案很有用,你可以放棄它(如果你有足夠的聲望),並且在任何情況下,如果它滿意地回答你的問題,我們鼓勵你點擊複選標記來接受它。 –

2

您可以使用extract_numeric從tidyr包 - 它會處理的要素投入和刪除逗號,美元符號等

library(tidyr) 
comisiones$Monto.Pago.Credito <- extract_numeric(comisiones$Monto.Pago.Credito) 

如果得到的數量很大,他們可能不會有小數位的打印,當您查看它們,無論您使用的是as.numeric還是extract_numeric(本身稱爲as.numeric)。但精度仍在儲存中。例如:

> x <- extract_numeric("1,200,000.3444") 
> x 
[1] 1200000 

驗證精度仍存儲:

> format(x, nsmall = 4) 
[1] "1200000.3444" 
> x > 1200000.3 
[1] TRUE