如何将字符列转换为R中的数字

时间:2014-07-23 22:28:18

标签: r csv integer character converter

我在R 3.1.1

中写了一个R代码

我想将Ventas_filtradas $ Total的值归类为classcarácter。我试图在read.csv中使用as.integer(x),as.numeric(x),colClasses,但是强制不起作用并且发生以下两种情况之一:

1)“-0.055”的强制导致NA。 2)强制“-0.055”导致1.如果我使用type.convert(x,dec =“,”)然后将其转换为整数

,就会发生这种情况

这是代码:

        specdata<-setwd ("C:/Users/GMORENO/Documents/LUDESA DE COLOMBIA/Pronosticos R")
        ## Readlines, read all the lines of the file

        Todas_las_filas = readLines("ZSD_VENTAS_COMPLETO.xls")
        ## delete lines I do not need
        filtrar_filas = Todas_las_filas[-c(1:8,10)]
        ## 

        Ventas_filtradas = read.csv(textConnection(filtrar_filas), sep="\t", header = TRUE, dec=",", stringsAsFactors = FALSE)

        classes <- sapply(Ventas_filtradas, class)
        classes<-as.data.frame(classes)
        classes[56,1]<-"numeric"
        classes<-as.vector(classes)

        Ventas_filtradas = read.table(textConnection(filtrar_filas), sep="\t", header = TRUE, dec=",", colClasses=classes, stringsAsFactors = FALSE)


Warning message:
In read.table(textConnection(filtrar_filas), sep = "\t", header = TRUE,  :
  not all columns named in 'colClasses' exist
    ##names of the columns 


c("\tNo. Factura\tFecha\tClase\tOrg. Ventas\tDescripción Org. Vtas.\tCanal\tDescripción Canal\tSector\tDescripción Sector\tOf.Ventas\tDescripción Of. Vtas\tGrupo\tDescripción Grupo\tVendedor\tNombre Vendedor\tCod. Cliente\tNombre Cliente\tGr. Clientes\tDescripción Gr. Clientes\tZona de Ventas\tDescripción Zna. Vtas\tCiudad\tDescripción Ciudad\tRegión\tDescripción Region\tRamo\tDescripción Ramo\tRamo 1\tDescripción Ramo 1\tGrupo precios\tDescripción Gr. Precios\tABC\tNo. Material\tDescripción del material\tCódigo exxon\tGrupo Articulos\tDescripción Gr. Art.\tTipo de pedido\tDescripción Tp. Ped.\tJerarquía\tJN1\tJerarquía Nivel 1\tJN2\tJerarquía Nivel 2\tJN3\tJerarquía Nivel 3\tJN4\tJerarquía Nivel 4\tJN5\tJerarquía Nivel 5\tCantidad Facturada\tUnidad Medida\t   Peso Neto\tCantidad\t      Total\t     Valor Neto\t      P. V. G.\t  P. T. G.\t% Variación.\tDoc. contable\tCentroBE\tUsuario\tLinea_bi\tAgencia\tHORA", 
"\t88004178\t02.07.2014\tZNCR\tLC01\tLudesa de Colombia\t15\tVTA.DCTA.VENDEDOR\t10\tLUBRICANTES\t8050\tBOGOTA\t010\tLUDESA BOGOTA\t00000348\tDANIEL MANTILLA\t30025339\tTRACTOCARGA LTDA\tC1\tB2B\tCWC100\tCentro Occidente\t1001\tBOGOTA, D.C.\t11\tBOGOTÁ\tD080\tSec.Transporte\tD08030\tS.Tran.Carg-Camiones\t00\tSin Grupo Precio\t\t           120714\tM-DELVAC XTREME GREASE - 1/180KG\t\t01\tLubricantes\t100\tNota crédito por precio alto\t010010020020030\t010\tLUBRICANTES\t010\tMOBIL\t020\tPREM\t020\tCVL\t030\tGRASAS\t-0,001\tTR\t-0,184\t 55,006\t-0,055\t-1.879.860,00\t34.179.272,73\t41.906,01\t  81.461,74\t2300003460\tL08110\tFATEHORTUA\tLUB\tBG01\t08:18:51", 
"\t88004179\t02.07.2014\tZFDR\tLC01\tLudesa de Colombia\t15\tVTA.DCTA.VENDEDOR\t10\tLUBRICANTES\t8050\tBOGOTA\t010\tLUDESA BOGOTA\t00000348\tDANIEL MANTILLA\t30025139\tMOTOR OIL SAS\tC2\tB2C\tCWN100\tNoroccidente\t1001\tBOGOTA, D.C.\t11\tBOGOTÁ\tD105\tCentro Lubricación\tD10510\tCentro lubr. Canal\t00\tSin Grupo Precio\t\t           121926\tM-SUPER 1000 20W-50 - GRANEL\t\t01\tLubricantes\t014\tPedido recibido via CORREO ELECTRONICO\t010010020010100\t010\tLUBRICANTES\t010\tMOBIL\t020\tPREM\t010\tPVL\t100\tMOTOR MULTIGRADO\t-200,000\tGL\t-2.612,000\t  1,000\t-200,000\t-8.234.934,00\t    41.174,67\t41.906,01\t-1,75\t2100031804\tL08110\tFALVIS\tLUB\tBG01\t10:02:51"
)

1 个答案:

答案 0 :(得分:0)

你好:我可以解决它。问题是逗号(,)。解决方案是在没有逗号的情况下提取所有字符串,然后将它们转换为整数。

totales<-c("0,055","-200,000","135,00")

totales2<- totales
## determine the amount of character of each item of the vector
num_caracteres<-nchar(totales)
## delete the last 4 characters
num_caracteres<-num_caracteres-4
## extract al the carácter without the (,)
totales2<- substring(totales, 1, num_caracteres)
totales3<- as.integer(totales2)
totales<-totales3