unir separado separadas rango por poner operadores numeros espacio cómo concatenar concatenacion comas coma columnas celdas cadenas r aggregate r-faq

separado - unir celdas en excel



Contraer/concatenar/agregar una columna a una sola cadena separada por comas dentro de cada grupo (2)

Cambia donde pones como as.character :

> out <- ddply(data, .(A, B), summarise, test = list(as.character(C))) > str(out) ''data.frame'': 4 obs. of 3 variables: $ A : num 111 111 222 222 $ B : int 1 2 1 2 $ test:List of 4 ..$ : chr "5" "7" ..$ : chr "6" ..$ : chr "9" ..$ : chr "8" "10" > out A B test 1 111 1 5, 7 2 111 2 6 3 222 1 9 4 222 2 8, 10

Sin embargo, tenga en cuenta que cada elemento todavía es en realidad un carácter separado, no una cadena de caracteres única. Es decir, esta no es una cadena real que se parece a "5, 7", sino dos caracteres, "5" y "7", que R muestra con una coma entre ellos.

Compare con lo siguiente:

> out2 <- ddply(data, .(A, B), summarise, test = paste(C, collapse = ", ")) > str(out2) ''data.frame'': 4 obs. of 3 variables: $ A : num 111 111 222 222 $ B : int 1 2 1 2 $ test: chr "5, 7" "6" "9" "8, 10" > out A B test 1 111 1 5, 7 2 111 2 6 3 222 1 9 4 222 2 8, 10

La solución comparable en la base R es, por supuesto, aggregate :

> A1 <- aggregate(C ~ A + B, data, function(x) c(as.character(x))) > str(A1) ''data.frame'': 4 obs. of 3 variables: $ A: num 111 222 111 222 $ B: int 1 1 2 2 $ C:List of 4 ..$ 0: chr "5" "7" ..$ 1: chr "9" ..$ 2: chr "6" ..$ 3: chr "8" "10" > A2 <- aggregate(C ~ A + B, data, paste, collapse = ", ") > str(A2) ''data.frame'': 4 obs. of 3 variables: $ A: num 111 222 111 222 $ B: int 1 1 2 2 $ C: chr "5, 7" "9" "6" "8, 10"

Quiero agregar una columna en un marco de datos de acuerdo con dos variables de agrupación, y separar los valores individuales por una coma.

Aquí hay algunos datos:

data <- data.frame(A = c(rep(111, 3), rep(222, 3)), B = rep(1:2, 3), C = c(5:10)) data # A B C # 1 111 1 5 # 2 111 2 6 # 3 111 1 7 # 4 222 2 8 # 5 222 1 9 # 6 222 2 10

"A" y "B" son variables de agrupamiento, y "C" es la variable que quiero colapsar en una cadena de character separados por comas. Yo he tratado:

library(plyr) ddply(data, .(A,B), summarise, test = list(C)) A B test 1 111 1 5, 7 2 111 2 6 3 222 1 9 4 222 2 8, 10

pero cuando traté de convertir la columna de prueba en character , es así:

ddply(data, .(A,B), summarise, test = as.character(list(C))) # A B test # 1 111 1 c(5, 7) # 2 111 2 6 # 3 222 1 9 # 4 222 2 c(8, 10)

¿Cómo puedo mantener el formato del character y separarlo con una coma? Por ejemplo, la fila 1 debe ser solo "5,7" , y no como c (5,7).


plyr Pruebe usar toString :

# plyr library(plyr) ddply(data, .(A,B), summarize, C = toString(C))

Aquí hay algunas alternativas adicionales que también usan toString :

tabla de datos

# alternative using data.table library(data.table) as.data.table(data)[, toString(C), by = list(A, B)]

agregado Esto no usa paquetes:

# alternative using aggregate from the stats package in the core of R aggregate(C ~., data, toString)

sqldf

Y aquí hay una alternativa que usa la función SQL group_concat usando el paquete sqldf :

library(sqldf) sqldf("select A, B, group_concat(C) C from data group by A, B", method = "raw")

dplyr Una alternativa dplyr :

library(dplyr) data %>% group_by(A, B) %>% summarise(test = toString(C)) %>% ungroup()