Estoy tratando de exportar puntos de datos de mongodb. Desafortunadamente, no pude conectarlo directamente a rstudio. Entonces, a partir del resultado de la consulta, creé un archivo de texto e intenté leerlo como archivo de texto en R.
"cityid", "count" "102","2" "55","31" "119","7" "206","1" "18","2" "15","1" "32","3" "14","1" "54","2" "23","85" "158","3" "266","1" "9","1" "34","1" "159","1" "31","1" "22","2" "209","2" "121","4" "73","12" "350","2" "311","2" "377","2" "230","7" "290","1" "49","2" "379","2" "75","1" "59","6" "165","3" "19","8" "13","40" "126","13" "243","12" "325","1" "17","1" "null","235" "144","2" "334","1" "40","12" "7","34" "181","40" "349","4"Básicamente, el formato es como el anterior y me gustaría convertirlo en un marco de datos del cual pueda hacer referencia para el cálculo con otros conjuntos de datos.
Esto es lo que traté de hacer para hacer un marco de datos ...
L <- readLines(file.choose()) L.df <- as.data.frame(L) list <- strsplit(L.df, ",") library("plyr") df <- ldply(list) colnames(df) <- c("city_id", "count") str(df) df$city_id <- suppressWarnings(as.numeric(as.character(df$city_id)))En la última línea, traté de convertir el valor del carácter en un valor numérico solo para fallar y forzarlos a NA.
¿Alguien tiene una mejor sugerencia para hacerlos como una tabla de valores numéricos? ¿O hay una mejor manera de llevar mongodb a R sin copiarlos y pegarlos como archivos de texto? Tuve éxito al conectarme a mongodb usando Rmongo, pero la sintaxis era demasiado complicada para que yo la entendiera. La consulta que usé es:
db.getCollection('logging_app_location_view_logs').aggregate([ {"$group": {"_id": "$city_id", "total": {"$sum":1}}} ]).forEach(function(l){ print('"' + l._id + '","' + l.total + '"'); });¡Gracias de antemano por tu ayuda!
No necesita volver a especificar los nombres de las columnas cuando ya ha pasado header = TRUE en la función read.table . El argumento colClasses se encargará de la clase de una columna de datos.
df <- read.table(file.choose(), header = TRUE, sep = ",", colClasses = c('character', 'character'), na.strings = 'null') # convert character to numeric format char_cols <- which(sapply(df, class) == 'character') # identify character columns df[char_cols] <- lapply(df[char_cols], as.numeric) # convert character to numeric column