Mostrando entradas con la etiqueta paste. Mostrar todas las entradas
Mostrando entradas con la etiqueta paste. Mostrar todas las entradas

2017-02-06

Dividir y guardar como ficheros subconjuntos de un data frame con R


Problema

Queremos guardar cada subconjunto de un data frame como un fichero de texto en el directorio de trabajo. En este ejemplo, utilizamos el conjunto de datos iris y crearemos un fichero CSV por cada una de las especies de la columna Species: setosa, versicolor, y virginica.

head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

Solución

Utilizamos el siguiente bucle para filtrar el data frame y creas los ficheros.

for (name in levels(iris$Species)) {
  # Filtramos el data frame y seleccionamos las columnas
  tmp <- subset(iris, select = -Species, Species == name)
  # Crea un nuevo fichero por cada especie
  fn <- paste(gsub(" ", "", name), ".csv", sep = "")
  # Por cada especie, guarda un CSV en el directorio de trabajo
  write.csv(tmp, fn, row.names = FALSE)
} 

Resultado

En el directorio de trabajo, se habrán guardo los ficheros correspondientes.

2016-04-13

Añadir caracteres a una columna de un data frame en R

Title

Problema

Tenemos un data frame y queremos añadir a la primera columna los caracteres chr.

df <- structure(list(V1 = c(1, 1, 1, 1, 2, 2), V2 = c(3423086, 3467184, 
4115236, 5202437, 7132558, 7448688), V3 = c(3423685, 3467723, 
4115672, 5203057, 7133089, 7449283)), .Names = c("V1", "V2", 
"V3"), row.names = c(NA, -6L), class = "data.frame")
  V1      V2      V3
1  1 3423086 3423685
2  1 3467184 3467723
3  1 4115236 4115672
4  1 5202437 5203057
5  2 7132558 7133089
6  2 7448688 7449283

Soluciones

Disponemos de múltiples opciones.

df <- paste("chr", df$V1, sep = "")
df <- sub("^", "chr", df$V1 )
df <- sprintf('chr%i', df$V1)
df <- interaction( "chr", df$V1, sep = "")

Resultado

   V1      V2      V3
1 chr1 3423086 3423685
2 chr1 3467184 3467723
3 chr1 4115236 4115672
4 chr1 5202437 5203057
5 chr2 7132558 7133089
6 chr2 7448688 7449283

Referencias

Nube de datos