R

时间:2016-06-14 16:17:38

标签: r

我遇到数据转换问题。我从.csv文件获得这些数据,例如:

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。

我不知道R中是否有特定的数据类或小数类型,我已经找了它,但它不起作用。

2 个答案:

答案 0 :(得分:3)

您需要首先清理列,例如删除逗号,将其转换为字符然后转换为数字:

allenh1@localhost ~/CS/tableau-api/tableau-qt
$ ls lib64/tableausdk
Java                          libboost_thread.so         libicuuc.so.44
libQt5Core.so.5               libboost_thread.so.1.56.0  libicuuc.so.44.0
libQt5Core.so.5.4.1           libcurl.so                 libmetrics2.so
libQt5Network.so.5            libcurl.so.4               libtabcrypto.so
libQt5Network.so.5.4.1        libcurl.so.4.4.0           libtabcrypto.so.1.0.0
libTableauCommon.so           libexpat.so                libtabssl.so
libTableauExtract.so          libexpat.so.1              libtabssl.so.1.0.0
libTableauServer.so           libexpat.so.1.6.0          libtabsys.so
libboost_chrono.so            libicudata.so.44           libtabz.so
libboost_chrono.so.1.56.0     libicudata.so.44.0         libtabz.so.1
libboost_date_time.so         libicui18n.so.44           libtabz.so.1.2.8
libboost_date_time.so.1.56.0  libicui18n.so.44.0         libtbb.so.2
libboost_system.so            libicuio.so.44             libtbbmalloc.so.2
libboost_system.so.1.56.0     libicuio.so.44.0

将因子变量直接转换为数字时会出现问题。

答案 1 :(得分:2)

您可以使用tidyr包中的extract_numeric - 它将处理因子输入并删除逗号,美元符号等。

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