que - Concatenar en filas a través de columnas específicas del marco de datos
que es un data frame en arcgis (3)
Tengo un marco de datos con columnas que, cuando están concatenadas (en forma de fila) como una cadena, me permitirían dividir el marco de datos en una forma deseada.
> str(data)
''data.frame'': 680420 obs. of 10 variables:
$ A : chr "2011-01-26" "2011-01-26" "2011-02-09" "2011-02-09" ...
$ B : chr "2011-01-26" "2011-01-27" "2011-02-09" "2011-02-10" ...
$ C : chr "2011-01-26" "2011-01-26" "2011-02-09" "2011-02-09" ...
$ D : chr "AAA" "AAA" "BCB" "CCC" ...
$ E : chr "A00001" "A00002" "B00002" "B00001" ...
$ F : int 9 9 37 37 37 37 191 191 191 191 ...
$ G : int NA NA NA NA NA NA NA NA NA NA ...
$ H : int 4 4 4 4 4 4 4 4 4 4 ...
Para cada fila, me gustaría concatenar los datos de las columnas F, E, D y C en una cadena (con el carácter de subrayado como separador). A continuación es mi intento fallido en esto:
data$id <- sapply(as.data.frame(cbind(data$F,data$E,data$D,data$C)), paste, sep="_")
Y debajo está el resultado no deseado:
> str(data)
''data.frame'': 680420 obs. of 10 variables:
$ A : chr "2011-01-26" "2011-01-26" "2011-02-09" "2011-02-09" ...
$ B : chr "2011-01-26" "2011-01-27" "2011-02-09" "2011-02-10" ...
$ C : chr "2011-01-26" "2011-01-26" "2011-02-09" "2011-02-09" ...
$ D : chr "AAA" "AAA" "BCB" "CCC" ...
$ E : chr "A00001" "A00002" "B00002" "B00001" ...
$ F : int 9 9 37 37 37 37 191 191 191 191 ...
$ G : int NA NA NA NA NA NA NA NA NA NA ...
$ H : int 4 4 4 4 4 4 4 4 4 4 ...
$ id : chr [1:680420, 1:4] "9" "9" "37" "37" ...
..- attr(*, "dimnames")=List of 2
.. ..$ : NULL
.. ..$ : chr "V1" "V2" "V3" "V4"
Cualquier ayuda sería muy apreciada.
O stringr::str_c()
o paste()
funcionará.
require(stringr)
data <- within(data, str_c(F,E,D,C, sep="_")
or else
data <- within(data, paste(F,E,D,C, sep="_")
Tratar
data$id <- paste(data$F, data$E, data$D, data$C, sep="_")
en lugar. La belleza del código vectorizado es que no necesita bucles fila por fila, o funciones equivalentes de bucle *.
Editar Aún mejor es
data <- within(data, id <- paste(F, E, D, C, sep=""))
Use unite
of tidyr
package:
require(tidyr)
data <- data %>% unite(id, F, E, D, C, sep = ''_'')
El primer parámetro es el nombre deseado, todas las siguientes hasta las columnas sep
para concatenar.