2014-07-23 2 views
-1

j'écrire un code R dans R 3.1.1Comment convertir une colonne de caractères numérique dans R

Je veux résumer les valeurs de Ventas_filtradas $ Total qui appartient à carácter de classe. J'ai essayé d'utiliser as.integer (x), as.numeric (x), colClasses dans read.csv, mais la coercition ne fonctionne pas et se produit l'une des deux situations:

1) la coercition de "- 0,055 "résulte en NA. 2) la contrainte de "-0.055" dans les résultats 1. Cela se produit si j'utilise type.convert (x, dec = ""), puis je le convertir en nombre entier

Voici le code:

 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" 
) 
+0

Il n'y a pas de R 3.11. 'a <-" -0,055 "; as.numérique (a) '# [1] -0,055; Puisque vous n'avez produit aucune preuve nous permettant de déterminer d'où proviennent vos erreurs, cette question risque d'être classée comme peu claire. Vous devriez produire les lignes de ce fichier qui causent les problèmes. De plus, vous ne pouvez généralement pas lire les fichiers .xls avec readLines. Cela va créer un gros gâchis. –

+0

Je suis confus, comment 'readLines()' est-il capable de lire un fichier XLS binaire? (Et je seconde la note de BondedDust.En outre, s'il vous plaît fournir une partie des données elle-même, en utilisant quelque chose comme 'dput (head (filtrar_filas)), puisque je déduis que votre problème est dans la seconde moitié du script.) – r2evans

+0

Bonjour: Je suis nouveau en R. Vous avez raison. J'utilise R 3.1.1 – GonzaloMoreno

Répondre

0

Bonjour: J'ai pu le résoudre. le problème était la virgule (,). La solution était d'extraire toute la chaîne sans la virgule et ensuite de les convertir en nombre entier.

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 
Questions connexes