Ho una semplice domanda su aggregando valori in R.combinando valori nelle righe in base a condizioni corrispondenti a R
Supponiamo di avere un dataframe:
DF <- data.frame(col1=c("Type 1", "Type 1B", "Type 2"), col2=c(1, 2, 3))
che assomiglia a questo:
col1 col2
1 Type 1 1
2 Type 1B 2
3 Type 2 3
Ho notato che ho Type 1
e Type 1B
nei dati, quindi mi piacerebbe combinare Type 1B
in Type 1
.
così decido di usare dplyr
:
filter(DF, col1=='Type 1' | col1=='Type 1B') %>%
summarise(n = sum(col2))
Ma ora ho bisogno di andare avanti con esso:
DF2 <- data.frame('Type 1', filter(DF, col1=='Type 1' | col1=='Type 1B') %>%
summarise(n = sum(col2)))
Credo che voglio cbind
questo nuovo DF2 nuovo all'originale DF, ma ciò significa che devo impostare i nomi delle colonne per essere coerenti:
names(DF2) <- c('col1', 'col2')
OK , ora posso rbind:
rbind(DF2, DF[3,])
Il risultato? Ha funzionato ....
col1 col2
1 Type 1 3
3 Type 2 3
... ma ugh! E 'stato terribile! Deve esserci un modo migliore per combinare semplicemente i valori.
Ci deve essere un modo più generalizzabile per fare qualcosa di così semplice, no? Sicuramente un'operazione così semplice non dovrebbe includere la corrispondenza del tipo regex !! –
In una riga ora. Ma avrai bisogno di 'gsub' o troverai un altro pattern per riconoscere che' type 1' e 'type1B' sono simili. L'aggregazione può essere eseguita con 'aggregate',' dplyr', 'data.table', ecc. –