Tengo la columna como la siguiente. Cada columna tiene dos pares, cada uno con el sufijo "a" y "b", por ejemplo col1a, col1b, colNa, colNb y así sucesivamente hasta el final del archivo (> 50000).fusión (opuesto a dividir) par de filas en r
mydataf <- data.frame (Ind = 1:5, col1a = sample (c(1:3), 5, replace = T),
col1b = sample (c(1:3), 5, replace = T), colNa = sample (c(1:3), 5, replace = T),
colNb = sample (c(1:3),5, replace = T),
K_a = sample (c("A", "B"),5, replace = T),
K_b = sample (c("A", "B"),5, replace = T))
mydataf
Ind col1a col1b colNa colNb K_a K_b
1 1 1 1 2 3 B A
2 2 1 3 2 2 B B
3 3 2 1 1 1 B B
4 4 3 1 1 3 A B
5 5 1 1 3 2 B A
salvo primera columna (Ind), quiero contraer el par de filas para hacer la mirada trama de datos como el siguiente, en el sametime el sufijo "a" ser eliminado y "b". También se fusionaron caracteres o número 1 pedirse primero que 2, una primera que B
Ind col1 colN K_
1 11 23 AB
2 13 22 BB
3 12 11 BB
4 13 13 AB
5 11 23 AB
Editar: La función grep (probablemente) en la respuesta tiene un problema si el nombre de las columnas son similares.
mydataf <- data.frame (col_1_a = sample (c(1:3), 5, replace = T),
col_1_b = sample (c(1:3), 5, replace = T), col_1_Na = sample (c(1:3), 5, replace = T),
col_1_Nb = sample (c(1:3),5, replace = T),
K_a = sample (c("A", "B"),5, replace = T),
K_b = sample (c("A", "B"),5, replace = T))
n <- names(mydataf)
nm <- c(unique(substr(n, 1, nchar(n)-1)))
df <- data.frame(sapply(nm, function(x){
idx <- grep(x, n)
cols <- mydataf[idx]
x <- apply(cols, 1,
function(z) paste(sort(z), collapse = ""))
return(x)
}))
names(df) <- nm
df
col_1_ col_1_N K_
1 2233 23 BB
2 2233 22 BB
3 1123 13 AB
4 1223 12 AB
5 2333 33 AB
gracias por la solución, sin embargo, la función, sin embargo parece que hay un problema si el nombre de variables son similares para ver los cambios recientes .. – shNIL
@sharnil, que sustituyó '' x' con paste0 (x, "[ab]? $") 'en' grep'. Ahora requerirá que el nombre de columna termine con aob, o con ninguno de ellos (para el caso 'Ind'). Si no hay una columna 'Ind', puede eliminar'? '. – Julius