Ho un frame di dati in cui vorrei aggiungere una riga aggiuntiva che sommi i valori per le colonne. Per esempio, diciamo che ho questi dati:Come si aggiunge una riga a un frame di dati con totali?
x <- data.frame(Language=c("C++", "Java", "Python"),
Files=c(4009, 210, 35),
LOC=c(15328,876, 200),
stringsAsFactors=FALSE)
dati assomiglia a questo:
Language Files LOC
1 C++ 4009 15328
2 Java 210 876
3 Python 35 200
Il mio istinto è quello di fare questo:
y <- rbind(x, c("Total", colSums(x[,2:3])))
E questo funziona, si calcola la totali:
> y
Language Files LOC
1 C++ 4009 15328
2 Java 210 876
3 Python 35 200
4 Total 4254 16404
Il problema LEM è che i file e le colonne LOC sono stati tutti convertiti in stringhe:
> y$LOC
[1] "15328" "876" "200" "16404"
Capisco che questo sta accadendo perché ho creato un vettore c("Total", colSums(x[,2:3])
con gli input che sono entrambi i numeri e stringhe, ed è la conversione di tutti gli elementi per un tipo comune in modo che tutti gli elementi del vettore siano gli stessi. Quindi accade la stessa cosa alle colonne Files e LOC.
Qual è un modo migliore per farlo?
Personalmente, non è consigliabile memorizzare i dati in giochi di ruolo, ecco a cosa servono le variabili! – hadley
In generale, sono d'accordo. Tendo anche a seguire il consiglio di @ csgillespie di non mescolare dati grezzi e statistiche riassuntive nello stesso oggetto. Come ha sottolineato il PO, tuttavia, non è un problema in questo caso poiché la domanda ruota intorno alla presentazione dei dati, non a un'ulteriore analisi. – Chase
Qual è l'equivalente del tidyverse? – thadk