trabajar studio leer importar exportar desde datos con commander cargar r google-spreadsheet

studio - leer xlsx en r



Importación de datos a R desde la hoja de cálculo de google (10)

Parece haber un cambio en las opciones de publicación de la hoja de cálculo de google. Ya no es posible publicar en la web como archivo csv o tab ( consulte esta publicación reciente ). Por lo tanto, la forma habitual de usar RCurl para importar datos en R desde una hoja de cálculo de Google ya no funciona:

require(RCurl) u <- "https://docs.google.com/spreadsheet/pub?hl=en_GB&hl=en_GB&key=0AmFzIcfgCzGFdHQ0eEU0MWZWV200RjgtTXVMY1NoQVE&single=true&gid=4&output=csv" tc <- getURL(u, ssl.verifypeer=FALSE) net <- read.csv(textConnection(tc))

¿Alguien tiene una solución alternativa?


Acabo de escribir un paquete simple para resolver exactamente este problema: descargar una hoja de Google usando solo la URL.

install.packages(''gsheet'') library(gsheet) gsheet2tbl(''docs.google.com/spreadsheets/d/1I9mJsS5QnXF2TNNntTy-HrcdHmIF9wJ8ONYvEJTXSNo'')

Más detalles están aquí: https://github.com/maxconway/gsheet


Estoy trabajando en una solución para esto. Aquí hay una función que funciona en sus datos, así como en algunas de mis propias hojas de cálculo de Google.

Primero, necesitamos una función para leer de las hojas de Google. readGoogleSheet() devolverá una lista de marcos de datos, uno para cada tabla que se encuentre en la hoja de Google:

readGoogleSheet <- function(url, na.string="", header=TRUE){ stopifnot(require(XML)) # Suppress warnings because Google docs seems to have incomplete final line suppressWarnings({ doc <- paste(readLines(url), collapse=" ") }) if(nchar(doc) == 0) stop("No content found") htmlTable <- gsub("^.*?(<table.*</table).*$", "//1>", doc) ret <- readHTMLTable(htmlTable, header=header, stringsAsFactors=FALSE, as.data.frame=TRUE) lapply(ret, function(x){ x[ x == na.string] <- NA; x}) }

A continuación, necesitamos una función para limpiar las tablas individuales. cleanGoogleTable() elimina las líneas vacías insertadas por Google, elimina los nombres de las filas (si existen) y te permite omitir las líneas vacías antes de que comience la tabla:

cleanGoogleTable <- function(dat, table=1, skip=0, ncols=NA, nrows=-1, header=TRUE, dropFirstCol=NA){ if(!is.data.frame(dat)){ dat <- dat[[table]] } if(is.na(dropFirstCol)) { firstCol <- na.omit(dat[[1]]) if(all(firstCol == ".") || all(firstCol== as.character(seq_along(firstCol)))) { dat <- dat[, -1] } } else if(dropFirstCol) { dat <- dat[, -1] } if(skip > 0){ dat <- dat[-seq_len(skip), ] } if(nrow(dat) == 1) return(dat) if(nrow(dat) >= 2){ if(all(is.na(dat[2, ]))) dat <- dat[-2, ] } if(header && nrow(dat) > 1){ header <- as.character(dat[1, ]) names(dat) <- header dat <- dat[-1, ] } # Keep only desired columns if(!is.na(ncols)){ ncols <- min(ncols, ncol(dat)) dat <- dat[, seq_len(ncols)] } # Keep only desired rows if(nrows > 0){ nrows <- min(nrows, nrow(dat)) dat <- dat[seq_len(nrows), ] } # Rename rows rownames(dat) <- seq_len(nrow(dat)) dat }

Ahora estamos listos para leer su hoja de Google:

> u <- "https://docs.google.com/spreadsheets/d/0AmFzIcfgCzGFdHQ0eEU0MWZWV200RjgtTXVMY1NoQVE/pubhtml" > g <- readGoogleSheet(u) > cleanGoogleTable(g, table=1) 2012-Jan Mobile internet Tanzania 1 Airtel Zantel Vodacom Tigo TTCL Combined > cleanGoogleTable(g, table=2, skip=1) BUNDLE FEE VALIDITY MB Cost Sh/MB 1 Daily Bundle (20MB) 500/= 1 day 20 500 25.0 2 1 Day bundle (300MB) 3,000/= 1 day 300 3,000 10.0 3 Weekly bundle (3GB) 15,000/= 7 days 3,000 15,000 5.0 4 Monthly bundle (8GB) 70,000/= 30 days 8,000 70,000 8.8 5 Quarterly Bundle (24GB) 200,000/= 90 days 24,000 200,000 8.3 6 Yearly Bundle (96GB) 750,000/= 365 days 96,000 750,000 7.8 7 Handset Browsing Bundle(400 MB) 2,500/= 30 days 400 2,500 6.3 8 STANDARD <NA> <NA> 1 <NA> <NA>


Gracias por esta solución! Funciona tan bien como el anterior. Utilicé otra solución para eliminar la primera línea en blanco. Cuando lo excluya, puede eliminar accidentalmente una observación válida cuando la línea esté ''sin congelar''. La instrucción adicional en la función elimina las filas que no tienen marca de tiempo.

readSpreadsheet <- function(url, sheet = 1){ library(httr) r <- GET(url) html <- content(r) sheets <- readHTMLTable(html, header=FALSE, stringsAsFactors=FALSE) df <- sheets[[sheet]] dfClean <- function(df){ nms <- t(df[1,]) names(df) <- nms df <- df[-1,-1] df <- df[df[,1] != "",] ## only select rows with time stamps row.names(df) <- seq(1,nrow(df)) df } dfClean(df) }


Hay una manera más fácil de buscar las hojas de Google, incluso si estás detrás del proxy

require(RCurl) fileUrl <- "https://docs.google.com/spreadsheets/d/[ID]/export?format=csv" fileCSV <- getURL(fileUrl,.opts=list(ssl.verifypeer=FALSE)) fileCSVDF <- read.csv(textConnection(fileCSV))


No estoy seguro si otros casos de uso tienen una mayor complejidad o si algo cambió mientras tanto. Después de publicar la hoja de cálculo en formato CSV, este simple 1-liner funcionó para mí:

myCSV<-read.csv("http://docs.google.com/spreadsheets/d/1XKeAajiH47jAP0bPkCtS4OdOGTSsjleOXImDrFzxxZQ/pub?output=csv")

R versión 3.3.2 (2016-10-31)


Publicar como CSV no parece ser compatible (o al menos no es compatible actualmente ) en las nuevas Hojas de cálculo de Google, que es el valor predeterminado para cualquier hoja nueva que cree. Sin embargo, puede crear una hoja en el formato anterior de Hojas de cálculo de Google, que admite la publicación como CSV, a través de este enlace ... https://g.co/oldsheets .

Más detalles sobre las hojas nuevas frente a las antiguas está aquí ... https://support.google.com/drive/answer/3541068?p=help_new_sheets&rd=1


Raspe la tabla html usando paquetes httr y XML.

library(XML) library(httr) url <- "https://docs.google.com/spreadsheets/d/12MK9EFmPww4Vw9P6BShmhOolH1C45Irz0jdzE0QR3hs/pubhtml" readSpreadsheet <- function(url, sheet = 1){ library(httr) r <- GET(url) html <- content(r) sheets <- readHTMLTable(html, header=FALSE, stringsAsFactors=FALSE) df <- sheets[[sheet]] dfClean <- function(df){ nms <- t(df[1,]) names(df) <- nms df <- df[-1,-1] row.names(df) <- seq(1,nrow(df)) df } dfClean(df) } df <- readSpreadsheet(url) df


Todavía es posible (a partir de mayo de 2015) obtener un archivo CSV de Google Spreadsheets, utilizando la URL oculta <sheeturl>/export?format=csv truco 1 .

Sin embargo, después de resolver este problema, uno encuentra otro problema: los números se formatean según la configuración regional de la hoja, por ejemplo, puede obtener 1,234.15 en una hoja "EE. UU." O 1.234,15 en una hoja "alemana". Para decidir sobre una configuración regional de la hoja, vaya a Archivo> Configuración de hoja de cálculo en Google Docs.

Ahora necesita eliminar la marca decimal de las columnas numéricas para que R pueda analizarlas; dependiendo de qué tan grandes sean sus números, esto puede necesitar hacerse varias veces para cada columna. Una función simple que escribí para lograr esto:

# helper function to load google sheet and adjust for thousands separator (,) getGoogleDataset <- function(id) { download.file(paste0(''https://docs.google.com/spreadsheets/d/'', id, ''/export?format=csv''),''google-ds.csv'',''curl''); lines <- scan(''google-ds.csv'', character(0), sep="/n"); pattern<-"/"([0-9]+),([0-9]+)"; for (i in 0:length(lines)) { while (length(grep(pattern,lines[i]))> 0) { lines[i] <- gsub(pattern,"/"//1//2",lines[i]); } } return(read.csv(textConnection(lines))); }

Deberá require(utils) y tener curl instalado, pero no otros paquetes adicionales.


Una forma más simple.

Asegúrese de hacer coincidir su URL cuidadosamente con el formato del ejemplo aquí. Puede obtener todo excepto el /export?format=csv desde la página de edición de Hojas de cálculo de Google. Luego, simplemente agregue manualmente esta pieza a la URL y luego use como se muestra aquí.

library(RCurl) library(mosaic) mydat2 <- fetchGoogle(paste0("https://docs.google.com/spreadsheets/d/", "1mAxpSTrjdFv1UrpxwDTpieVJP16R9vkSQrpHV8lVTA8/export?format=csv")) mydat2


Utilice el paquete googlesheets , una API de Google Sheets R de Jenny Bryan. Es la mejor manera de analizar y editar datos de Hojas de cálculo de Google en R. No solo puede extraer datos de Hojas de cálculo de Google, sino que puede editar los datos en Hojas de cálculo de Google, crear hojas nuevas, etc.

El paquete se puede instalar con install.packages("googlesheets") .

Hay una vignette para comenzar; ver github.com/jennybc/googlesheets para más. Y también puede instalar la última versión de desarrollo del paquete desde esa página de GitHub, si lo desea.