Mostrando entradas con la etiqueta Programación R. Mostrar todas las entradas
Mostrando entradas con la etiqueta Programación R. Mostrar todas las entradas

lunes, 27 de abril de 2020

R en Español: Función para convertir caracteres en números o destring

Hay ocasiones en las que tenemos números almacenados como palabras o strings.

Por ejemplo, si mi conjunto de datos es como el siguiente:
> df1 <- c("1", "2", "3", "4", "5")
> df2 <- c("6", "7", "8", "9", "10")
no seré capaz de sumar df1 + df2. Obtendré este error:
> df1+df2
Error in df1 + df2 : non-numeric argument to binary operator
Esto se debe a que los números en df1 y df2 no son reconocidos como números, sino como palabras. ¿Por qué? Pues al estar entre comillas, R los reconoce como palabras.

Para convertirlos en números necesitamos usar la función destring:
destring <- function(x,keep="0-9.-") {
  return( as.numeric(gsub(paste("[^",keep,"]+",sep=""),"",x)) )
}
De modo en el que al aplicarla a nuestros conjuntos de datos df1 y df2, obtenemos:
> df1 <- destring(df1)
> df2 <- destring(df2)
> df1+df2
[1]  7  9 11 13 15
Así, df1 y df2 se convirtieron en números con los que se pueden realizar operaciones sin obtener el error non-numeric argument to binary operator.

La función destring fue tomada del siguiente post en Stackoverflow: https://stackoverflow.com/questions/9739518/r-cleaning-up-a-character-and-converting-it-into-a-numeric/9740635#9740635

sábado, 4 de abril de 2020

R en español: Concatenar filas o columnas de distintos tamaños

Cuando se desea concatenar las filas o columnas de dos dataframes de distintos tamaños (length) se suele obtener este error:

#para filas
Error in rbind(deparse.level, ...) : 
  numbers of columns of arguments do not match

#para columnas
Error in cbind(deparse.level, ...) : 
  numbers of columns of arguments do not match

En estos casos se puede utilizar la función rbind.fill para filas o cbind.fill para columnas.

Las funciones rbind.fill y cbind.fill se encuentran en la librería rowr v1.1.3.

Ejemplo usando el database mtcars:

test <- mtcars[1:2,]
ncol(test)
# [1] 11

modified <- test[,1:9]
ncol(modified)
# [1] 9

rbind(test, modified)
# Error in rbind(deparse.level, ...) : 
  # numbers of columns of arguments do not match

library(plyr)
rbind.fill(test, modified)
  # mpg cyl disp  hp drat    wt  qsec vs am gear carb
# 1  21   6  160 110  3.9 2.620 16.46  0  1    4    4
# 2  21   6  160 110  3.9 2.875 17.02  0  1    4    4
# 3  21   6  160 110  3.9 2.620 16.46  0  1   NA   NA
# 4  21   6  160 110  3.9 2.875 17.02  0  1   NA   NA
Más información en el post original: https://stackoverflow.com/questions/46263982/error-in-rbinddeparse-level-invalid-list-argument-all-variables-should

R en Español: Obtener nombres de renglones con funcion row.names

Si deseo obtener los nombres de los renglones de mi dataframe puedo utilizar la función row.names de la paquetería básica de R y RStudio. ...