vbnewline que propiedades leyenda lento expresion etiquetas editar definicion data como arreglar r apply paste string-concatenation sapply

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.