| Contenido | |
|---|---|
| - Simplificación de formato |
- Crear libro de trabajo|
- Leer datos de unlibro de trabajo|
- Llamar a un libro de trabajo respentando su formato|
- Escribir datos en un archivo.xls|
_- Adicionar y eliminar una tabla*_|
- Calculo de media, mediana, desviación estandar, Resumen y graficación de datos|
En openxlsx, se requiere una aplicación de zip para que esté disponible para R. En Windows, la manera más sencilla de configurar esto es instalar RTools en : https://cran.rproyect.org/bin/windows/Rtools/
Durante la instalación hay que tener cuidado de marcar el path adecuado.
openxlsx simplifica el proceso de escribir y peinar archivos xlsx de Excel desde R y elimina la dependencia de Java.
El paquete openxlsx utiliza opciones globales para simplificar el formato:
options(“openxlsx.borderColour” = “black”)
options(“openxlsx.borderStyle” = “thin”)
options(“openxlsx.dateFormat” = “mm/dd/yyyy”)
options(“openxlsx.datetimeFormat” = “yyyy-mm-dd hh:mm:ss”)
options(“openxlsx.numFmt” = NULL)
options(“openxlsx.paperSize” = 9) ## A4
options(“openxlsx.orientation” = “portrait”) ## page orientation
## Siempre que se vaya utilizar comandos de openxlsx, tienes que llamar a la libreria
library(openxlsx)
## Para escribir en un data.frame
df <- data.frame("Date" = Sys.Date()-0:4,
"Logical" = c(TRUE, FALSE, TRUE, TRUE, FALSE),
"Currency" = paste("$",-2:2),
"Accounting" = -2:2,
"hLink" = "https://CRAN.R-project.org/",
"Percentage" = seq(-1, 1, length.out=5),
"TinyNumber" = runif(5) / 1E9, stringsAsFactors = FALSE)
class(df$Currency) <- "currency"
class(df$Accounting) <- "accounting"
class(df$hLink) <- "hyperlink"
class(df$Percentage) <- "percentage"
class(df$TinyNumber) <- "scientific"
## El formateo se puede aplicar simplemente a través de las funciones de escritura.
## Las opciones globales se pueden configurar para simplificar aún más las cosas.
options("openxlsx.borderStyle" = "thin")
options("openxlsx.borderColour" = "#4F81BD")
## Puedes crear un libro de trabajo y adicionar una hoja de trabajo
wb <- createWorkbook()
addWorksheet(wb, "writeData auto-formatting")
writeData(wb, 1, df, startRow = 2, startCol = 2)
writeData(wb, 1, df, startRow = 12, startCol = 2, borders = "surrounding")
writeData(wb, 1, df, startRow = 22, startCol = 2, borders = "rows")
writeData(wb, 1, df, startRow = 32, startCol = 2, borders ="columns")
writeData(wb, 1, df, startRow = 39, startCol = 2, borders ="all")
## crear los estilos de las cabeceras
hs1 <- createStyle(fgFill = "#4F81BD", halign = "CENTER", textDecoration = "Bold",
border = "Bottom", fontColour = "blue")
writeData(wb, 1, df, startRow = 25, startCol = 10, headerStyle = hs1,
borders = "rows", borderStyle = "thin")
## para la visualización del texto de una columna de hipervínculo simplemente se escribe sobre esas celdas
writeData(wb, sheet = 1, x = paste("Ruta", 1:5), startRow = 26, startCol = 14)
1
## [1] 1
## escribiendo como una tabla de Excel
addWorksheet(wb, "writeDataTable")
writeDataTable(wb, 2, df, startRow = 2, startCol = 2)
writeDataTable(wb, 2, df, startRow = 9, startCol = 2, tableStyle = "TableStyleLight9")
writeDataTable(wb, 2, df, startRow = 16, startCol = 2, tableStyle = "TableStylemedium2")
writeDataTable(wb, 2, df, startRow = 23, startCol = 2, tableStyle = "TableStyleMedium23")
writeData(wb, sheet = 2, x = paste("Ruta", 1:5), startRow = 3, startCol = 6)
2
## [1] 2
writeData(wb, sheet = 2, x = paste("Ruta", 6:10), startRow = 10, startCol = 6)
2
## [1] 2
openXL(wb) ## se abre la vesión temporal
## El argumento 'tableStyle' en writeDataTable puede ser cualquiera de los tipos de tabla predefinidos en Excel.
## Creando un nuevo libro de trabajo
wb <- createWorkbook("Fred")
## adicionando 3 hojas de trabajo
addWorksheet(wb, "Sheet 1")
addWorksheet(wb, "Sheet 2", gridLines = FALSE)
addWorksheet(wb, "Sheet 3", tabColour = "red")
addWorksheet(wb, "Sheet 4", gridLines = FALSE, tabColour = "#4F81BD")
## Encabezados y pies de páginas
addWorksheet(wb, "Sheet 5",
header = c("ENCABEZADO IZQUIERDO", "ENCABEZADO CENTRAL", "ENCABEZADO DERECHO"),
footer = c("PIE IZQUIERDO", "PIE CENTRAL", "PIE DERECHO"),
evenHeader = c("EVEN HEAD LEFT", "EVEN HEAD CENTER", "EVEN HEAD RIGHT"),
evenFooter = c("EVEN FOOT RIGHT", "EVEN FOOT CENTER", "EVEN FOOT RIGHT"),
firstHeader = c("TOP", "OF FIRST", "PAGE"),
firstFooter = c("BOTTOM", "OF FIRST", "PAGE"))
addWorksheet(wb, "Sheet 6",
header = c("&[Date]", "ALL HEAD CENTER 2", "&[Page] / &[Pages]"),
footer = c("&[Path]&[File]", NA, "&[Tab]"),
firstHeader = c(NA, "Center Header of First Page", NA),
firstFooter = c(NA, "Center Footer of First Page", NA))
addWorksheet(wb, "Sheet 7",
header = c("ALL HEAD LEFT 2", "ALL HEAD CENTER 2", "ALL HEAD RIGHT 2"),
footer = c("ALL FOOT RIGHT 2", "ALL FOOT CENTER 2", "ALL FOOT RIGHT 2"))
addWorksheet(wb, "Sheet 8",
firstHeader = c("FIRST ONLY L", NA, "FIRST ONLY R"),
firstFooter = c("FIRST ONLY L", NA, "FIRST ONLY R"))
## Se necesitan datos en la hoja de trabajo para ver todos los encabezados y pies de página.
writeData(wb, sheet = 5, 1:500)
writeData(wb, sheet = 6, 1:500)
writeData(wb, sheet = 7, 1:500)
writeData(wb, sheet = 8, 1:500)
## y por último se salva el libro de trabajo
saveWorkbook (wb, "addWorksheetExample.xlsx", overwrite = TRUE)
Asimismo, otra funcionalidad de openxlsx es que puedes leer datos de un archivo Excel o un objeto Workbook en un archivo de datos.
Para lo anterior se tiene los siguientes comandos:| Comandos | Descripción |
|---|---|
| xlsxFile | Archivo xlsx, objeto Workbook o URL en el archivo xlsx. |
| sheet | El nombre o el índice de la hoja para leer los datos. |
| startRow | Primera fila para comenzar a buscar datos.Las filas vacías en la parte superior de un archivo son siempre omitidas, independientemente del valor de startRow. |
| colNames | Si es “TRUE”, la primera fila de datos se utilizará como nombres de columna. |
| rowNames | Si es “TRUE”, la primera columna de datos se utilizará como nombres de fila. |
| detectDates | Si es “TRUE”, intenta reconocer las fechas y realizar la conversión. |
| skipEmptyRows | Si es “TRUE”, las filas vacías se saltarán, o bien las filas vacías después de la primera fila que contenga los datos devolverán una fila de NAs. |
| skipEmptyCols | Si “TRUE”, se saltan las columnas vacías. |
| rows | Vector numérico que especifica las filas del archivo de Excel para leer. Si NULL, todas se leen. |
| cols | Vector numérico que especifica qué columnas se leen en el archivo de Excel. Si es NULL, se leen todas las columnas. |
| check.names Lógica. | Si TRUE entonces los nombres de las variables en el marco de datos se verifican para asegurarse de que son nombres de variables válidas. |
| namedRegion | Si no es NULL startRow, filas y cols paramters son ignorados. |
| na.strings | Vector de caracteres de cadenas que deben interpretarse como NA. Las celdas en blanco ser devuelto NA. |
| fillMergedCells | Si es TRUE, el valor de una celda fusionada se da a todas las celdas de la fusión. |
Ejemplo:
## Lectura de archivo
xlsxFile <- system.file("readTest.xlsx", package = "openxlsx")
df1 <- read.xlsx(xlsxFile = xlsxFile, sheet = 1, skipEmptyRows = FALSE)
sapply(df1, class)
## Var1 Var2 Var3 Var4 Var5 Var6
## "logical" "numeric" "numeric" "character" "numeric" "character"
## Var7
## "numeric"
df2 <- read.xlsx(xlsxFile = xlsxFile, sheet = 3, skipEmptyRows = TRUE)
df2$Date <- convertToDate(df2$Date)
sapply(df2, class)
## Date value word bool wordZ2
## "Date" "numeric" "character" "logical" "character"
head(df2)
## Date value word bool wordZ2
## 1 2014-04-28 0.8390764 N-U-B-R-A FALSE FALSE-Z
## 2 2014-04-27 0.8863800 N-Z-P-S-Y TRUE TRUE-Z
## 3 2014-04-26 0.5741314 C-G-D-X-H TRUE TRUE-Z
## 4 2014-04-25 0.1366065 <NA> FALSE FALSE-Z
## 5 2014-04-24 0.3692582 B-K-A-O-W TRUE TRUE-Z
## 6 2014-04-23 NA H-P-G-O-K TRUE TRUE-Z
df2 <- read.xlsx(xlsxFile = xlsxFile, sheet = 3, skipEmptyRows = TRUE,
detectDates = TRUE)
sapply(df2, class)
## Date value word bool wordZ2
## "Date" "numeric" "character" "logical" "character"
head(df2)
## Date value word bool wordZ2
## 1 2014-04-28 0.8390764 N-U-B-R-A FALSE FALSE-Z
## 2 2014-04-27 0.8863800 N-Z-P-S-Y TRUE TRUE-Z
## 3 2014-04-26 0.5741314 C-G-D-X-H TRUE TRUE-Z
## 4 2014-04-25 0.1366065 <NA> FALSE FALSE-Z
## 5 2014-04-24 0.3692582 B-K-A-O-W TRUE TRUE-Z
## 6 2014-04-23 NA H-P-G-O-K TRUE TRUE-Z
wb <- loadWorkbook(system.file("readTest.xlsx", package = "openxlsx"))
df3 <- read.xlsx(wb, sheet = 2, skipEmptyRows = FALSE, colNames = TRUE)
df4 <- read.xlsx(xlsxFile, sheet = 2, skipEmptyRows = FALSE, colNames = TRUE)
all.equal(df3, df4)
## [1] TRUE
wb <- loadWorkbook(system.file("readTest.xlsx", package = "openxlsx"))
df3 <- read.xlsx(wb, sheet = 2, skipEmptyRows = FALSE,
cols = c(1, 4), rows = c(1, 3, 4))
## URL
##
#xlsxFile <- "https://github.com/awalker89/openxlsx/raw/master/inst/readTest.xlsx"
#head(read.xlsx(xlsxFile))
A continuación se muestra un ejemplo:
## llama a un libro de trabajo desde un directorio
wb <- loadWorkbook(file = system.file("loadExample.xlsx", package= "openxlsx"))
##En lista los nombres de las hojas de trabajo
names(wb)
## [1] "IrisSample" "testing" "mtcars" "mtCars Pivot"
## Ve el libro de trabajo
wb
## A Workbook object.
##
## Worksheets:
## Sheet 1: "IrisSample"
##
## Custom row heights (row: height)
## 1: 34.5
## Custom column widths (column: width)
## 1: 10.86, 2: 10.43, 3: 10.86, 4: 10.43, 5: 13.14, 7: 12.43, 8: 18.43, 9: 18.00, 10: 18.14, 11: 17.71, 12: 9.715
##
##
## Sheet 2: "testing"
##
## Custom row heights (row: height)
## 7: 24, 8: 15.75, 20: 15.75
## Custom column widths (column: width)
## 9: 13.00, 10: 13.00, 11: 13.00, 12: 13.00, 13: 13.00, 14: 13.00
##
##
## Sheet 3: "mtcars"
##
##
## Sheet 4: "mtCars Pivot"
##
## Custom column widths (column: width)
## 1: 12.43, 2: 14.29, 3: 8.860, 4: 9.145, 5: 9.145
##
##
##
##
## Images:
## Image 1: "C:/Users/agair/AppData/Local/Temp/RtmpW0el1N//file31f07a2e7be7_openxlsx_loadWorkbook/xl/media/image2.jpeg"
## Image 2: "C:/Users/agair/AppData/Local/Temp/RtmpW0el1N//file31f07a2e7be7_openxlsx_loadWorkbook/xl/media/image1.jpeg"
##
## Charts:
## Chart 1: "C:/Users/agair/AppData/Local/Temp/RtmpW0el1N//file31f07a2e7be7_openxlsx_loadWorkbook/xl/media/image2.jpeg"
## Chart 2: "C:/Users/agair/AppData/Local/Temp/RtmpW0el1N//file31f07a2e7be7_openxlsx_loadWorkbook/xl/media/image1.jpeg"
## Worksheet write order: 1, 2, 3, 4
## Adiciona una nueva hoja de trabajo
addWorksheet(wb, "A new worksheet")
## salva el libro de trabajo
saveWorkbook(wb, "loadExample.xlsx", overwrite = TRUE)
| Comandos | Descripción |
|---|---|
| x | objeto o una lista de objetos que pueden ser manejados por writeData para escribir en el archivo. |
| archivo | nombre de archivo .xlsx |
| asTable | escribir usando writeDataTable en lugar de writeData. |
| … | Parámetros opcionales para pasar a funciones: |
| 1. createWorkbook | |
| 2. addWorksheet | |
| 3. writeData | |
| 4. FreezePane | |
| 5. saveWorkbook |
Los parámetros opcionales son:
Parámetros para crear una hoja de trabajo:
| Comandos | Descripción |
|---|---|
| creator | creaa una cadena que especifica el autor del libro de trabajo. |
Parámetros para adicionar una hoja de trabajo:
| Comandos | Descripción |
|---|---|
| sheetName | Nombre de la hoja de trabajo. |
| GridLines | Una lógica. Si es FALSO, las líneas de cuadrícula de la hoja de trabajo estarán ocultas. |
| tabColour | Color de la pestaña de la hoja de trabajo. Un color válido (perteneciente a colores ()) o un color hexadecimal válido que comienza con “#”. |
| zoom | Un binario numérico entre 10 y 400. Nivel de zoom de la hoja de trabajo como porcentaje. |
Parámetros para escribir datos / escribir una tabla de datos:
| Comandos | Descripción |
|---|---|
| startCol | Un vector que especifica la (s) columna (s) inicial (es) para escribir df. |
| startRow | Un vector que especifica la (s) fila (s) inicial (es) para escribir df. |
| xy | Una alternativa para especificar startCol y startRow individualmente. Un vector de la forma c (startCol, startRow). |
| colNames o col.names | Si es TRUE, los nombres de columna de x se escriben. |
| rowNames o row.names | Si es TRUE, los nombres de fila de x se escriben. |
| headerStyle | Estilo personalizado para aplicar a los nombres de columnas. |
| Borders | “circundante”, “columnas” o “filas” o NULL. Si “circundante”, se dibuja un borde alrededor de los datos. Si “filas”, un borde circundante se dibuja un borde alrededor de cada fila. Si “columnas”, un borde circundante se dibuja con un borde entre cada columna. Si se dibujan “todos” todos los bordes de celda. |
| borderColour | Color del borde de la celda |
| borderStyle | estilo de línea de borde. |
| keepNA | Si es TRUE, los valores NA se convierten a # N / A en Excel, de lo contrario, las celdas NA estarán vacías. Por defecto es FALSE. |
Parámetros freezePane:
| Comandos | Descripción |
|---|---|
| firstActiveRow | Fila superior de región activa para congelar el panel. |
| firstActiveCol | La columna izquierda más lejana de la región activa para congelar el panel. |
| firstRow | Si es TRUE, congela la primera fila (equivalente a firstActiveRow = 2). |
| firstCol | Si es TRUE, congela la primera columna (equivalente a firstActiveCol = 2). |
Parámetros de colWidths
| Comandos | Descripción |
|---|---|
| colWidths | Debe ser “auto” de valor. Establece todas las columnas que contienen datos en ancho automático. |
Parámetros saveWorkbook
| Comandos | Descripción |
|---|---|
| overwrite | Sobrescribir archivo existente (Predeterminado a TRUE como con write.table). |
Nota: Las columnas de x con clase Fecha o POSIXt se diseñan automáticamente como fechas y tiempos de datos, respectivamente.
## escribiendo en el directorio
options("openxlsx.borderColour" = "#4F80BD") ## set default border colour
write.xlsx(iris, file = "writeXLSX1.xlsx", colNames = TRUE, borders = "columns")
write.xlsx(iris, file = "writeXLSX2.xlsx", colNames = TRUE, borders = "surrounding")
hs <- createStyle(textDecoration = "BOLD", fontColour = "#FFFFFF", fontSize=12,
fontName="Arial Narrow", fgFill = "#4F80BD")
write.xlsx(iris, file = "writeXLSX3.xlsx", colNames = TRUE, borders = "rows", headerStyle = hs)
## Los elementos de las listas se escriben en hojas de trabajo individuales, usando nombres de listas como nombres de hojas si están disponibles
l <- list("IRIS" = iris, "MTCATS" = mtcars, matrix(runif(1000), ncol = 5))
write.xlsx(l, "writeList1.xlsx", colWidths = c(NA, "auto", "auto"))
## A cada hojas se les pueden dar diferentes parámetros.
write.xlsx(l, "writeList2.xlsx", startCol = c(1,2,3), startRow = 2,
asTable = c(TRUE, TRUE, FALSE), withFilter = c(TRUE, FALSE, FALSE))
Con el openxlsx también se puede llamar y eliminar una tabla de Excel en un libro de trabajo.
| Comandos | Descripción |
|---|---|
| wb | Un objeto de libro de trabajo. |
| sheet | Un nombre o índice de una hoja de cálculo. |
| table | Nombre de la tabla para eliminar. |
wb <- createWorkbook()
addWorksheet(wb, sheetName = "Sheet 1")
addWorksheet(wb, sheetName = "Sheet 2")
writeDataTable(wb, sheet = "Sheet 1", x = iris, tableName = "iris")
writeDataTable(wb, sheet = 1, x = mtcars, tableName = "mtcars", startCol = 10)
removeWorksheet(wb, sheet = 1) ## delete worksheet removes table objects
writeDataTable(wb, sheet = 1, x = iris, tableName = "iris")
writeDataTable(wb, sheet = 1, x = mtcars, tableName = "mtcars", startCol = 10)
## removeTable() deletes table object and all data
getTables(wb, sheet = 1)
## [1] "iris" "mtcars"
## attr(,"refs")
## [1] "A1:E151" "J1:T33"
removeTable(wb = wb, sheet = 1, table = "iris")
writeDataTable(wb, sheet = 1, x = iris, tableName = "iris", startCol = 1)
getTables(wb, sheet = 1)
## [1] "mtcars" "iris"
## attr(,"refs")
## [1] "J1:T33" "A1:E151"
removeTable(wb = wb, sheet = 1, table = "iris")
writeDataTable(wb, sheet = 1, x = iris, tableName = "iris", startCol = 1)
saveWorkbook(wb = wb, file = "removeTableExample.xlsx", overwrite = TRUE)
Con los comandos Get o set working Directory
getwd evuelve un archivo de ruta absoluto que representa el directorio de trabajo actual del proceso R; setwd (dir) se usa para establecer el directorio de trabajo en dir.
getwd devuelve una cadena de caracteres o NULL si el directorio de trabajo no está disponible. En Windows, la ruta devuelta usará / como el separador de ruta y se codificará en UTF-8. La ruta no tendrá un final / a menos que sea el directorio raíz (de una unidad o compartir en Windows).
setwd devuelve el directorio actual antes del cambio, de manera invisible y con las mismas convenciones que getwd. Se producirá un error si no tiene éxito (incluso si no está implementado).
Por Ejemplo:
(WD <- getwd())
## [1] "E:/MA_UNAM/MATERIA1_R"
if (!is.null(WD)) setwd(WD)
library(openxlsx)
setwd("C:\\Users\\agair\\OneDrive\\ARCHEXCEL")
INTERNETH<- read.xlsx("HI.xlsx", sheet = 2)
attach(INTERNETH)
View(INTERNETH)
mean(HOGARI)
## [1] 117.2995
median(HOGARI)
## [1] 89
sd(HOGARI)
## [1] 195.9891
summary(HOGARI)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 23.0 39.0 89.0 117.3 102.0 1515.0
Los datos se comportan de la siguiente manera:
Bibliográfia:
Importing Data with RStudio Autor: Javier Luraschi Enero 11, 2017 URL: https://support.rstudio.com/hc/en-us/articles/218611977-Importing-Data-with-RStudio
Quick list of useful R packages Autor: Garrett Grolemund Enero 12, 2017 URL: https://support.rstudio.com/hc/en-us/articles/201057987-Quick-list-of-useful-R-packages
Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.