2016-06-14 43 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