Ho la colonna come la seguente. Ogni colonna ha due coppie ciascuna con suffisso "a" e "b" - ad esempio col1a, col1b, colNa, colNb e così via fino alla fine del file (> 50000).unione (opposta della divisione) coppia di righe in 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
Tranne prima colonna (Ind), voglio crollare la coppia di righe per rendere il look dataframe come il seguente, al Sametime il suffisso "a" e "b" essere rimosso. Anche fuse caratteri o numero da ordinare 1 prima che il 2, A prima di 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
Edit: La funzione di grep (probabilmente) in risposta ha problema se il nome di colonne sono simili.
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
grazie per la soluzione, tuttavia la funzione, ma sembra che non v'è problema se il nome delle variabili sono simili vedere le modifiche recenti .. – shNIL
@sharnil, ho sostituito 'x' con' paste0 (x, "[ab]? $") 'in' grep'. Ora richiederà che il nome della colonna termini con a o b, o con nessuno di essi (per il caso 'Ind'). Se non c'è alcuna colonna 'Ind' puoi rimuovere'? '. – Julius