HOWTO · R
Come contare il numero di osservazioni in R
Conta ogni riga, le righe che soddisfano condizioni o le occorrenze per gruppo in un data frame R con R di base e dplyr.
In questa pagina
In un data frame R, un’osservazione è una riga. Usa nrow() per il numero totale di osservazioni, una condizione logica con sum() per le righe corrispondenti, oppure count() di dplyr per le frequenze per gruppo. Gli esempi utilizzano un piccolo data frame, in modo da poter adattare i nomi delle colonne ai tuoi dati.
Contare tutte le righe con nrow()
nrow(data) restituisce il numero di righe in data. È la scelta diretta quando ogni riga deve essere contata. L’esempio ha cinque righe e nrow(students) fornisce il valore stampato di seguito.
students <- data.frame(
name = c("Ada", "Ben", "Cam", "Dee", "Eli"),
passed = c(TRUE, FALSE, TRUE, TRUE, FALSE),
group = c("A", "A", "B", "B", "B")
)
total <- nrow(students)
cat("Total observations:", total, "\n")
Total observations: 5
Per un conteggio totale delle righe, nrow() è più chiaro che costruire un vettore logico. In particolare, with(data, 1) valuta lo scalare 1; non crea un valore per ogni riga, quindi sum(with(data, 1)) non è un metodo per contare le righe.
Contare le righe che soddisfano condizioni in R di base
Per contare le righe che soddisfano una condizione, crea un vettore logico e passalo a sum(). In R, TRUE contribuisce con 1 e FALSE con 0 quando vengono sommati. Puoi usare with() per fare riferimento alle colonne del data frame senza ripetere il nome del data frame:
sum(with(students, passed))
Per più condizioni, combinale con & per “e” o | per “o”. Ad esempio, sum(with(students, passed & group == "B")) conta gli studenti che hanno superato e appartengono al gruppo B. Usa le parentesi quando rendono una condizione combinata più facile da leggere.
Se una condizione contiene NA, sum() restituisce NA a meno che tu non gestisca quei valori. Usa na.rm = TRUE quando i valori sconosciuti devono essere esclusi dal conteggio, come in sum(students$passed, na.rm = TRUE). Per un’espressione come students$score > 70, questo conta solo i punteggi noti superiori a 70; non tratta i punteggi mancanti come corrispondenze.
Puoi anche creare un sottoinsieme del data frame e contare le sue righe risultanti con nrow():
nrow(students[students$passed, , drop = FALSE])
L’argomento drop = FALSE mantiene il sottoinsieme in forma di data frame anche quando contiene una sola colonna. Se la condizione può contenere NA, rimuovi prima le righe sconosciute dall’indice logico, ad esempio students[!is.na(students$passed) & students$passed, , drop = FALSE]; altrimenti R di base può includere una riga interamente NA per una condizione sconosciuta. Usa questo approccio quando ti servono le righe filtrate per un lavoro successivo; usa sum() quando ti serve solo il conteggio. Per il filtraggio seguito da un conteggio delle righe in un altro esempio, vedi contare le righe per gruppo.
Contare righe e gruppi con dplyr
dplyr fornisce filter() per selezionare le righe e count() per riportare quante righe compaiono in ciascun gruppo. Queste operazioni rispondono a domande diverse: usa filter() seguito da nrow() per il numero di righe che soddisfano una condizione, e usa count() quando vuoi una frequenza per ciascun valore o combinazione di valori.
Ad esempio, nrow(dplyr::filter(students, passed)) conta gli studenti il cui valore passed è TRUE; filter() elimina le righe quando la sua condizione è NA. Per contare le osservazioni in ciascun gruppo, usa dplyr::count(students, group). Per contare le combinazioni, fornisci più colonne di raggruppamento, come in dplyr::count(students, group, passed). Queste chiamate sono illustrative e non eseguite qui; le prove di esecuzione fornite coprono solo l’esempio del totale delle righe.
count() restituisce le colonne di raggruppamento e una colonna di conteggio denominata n per impostazione predefinita. Il suo argomento wt somma invece una colonna di peso all’interno di ciascun gruppo, che è un totale ponderato piuttosto che un ordinario numero di righe. Per un semplice conteggio delle osservazioni, lascia wt non impostato.
Scegli il metodo che corrisponde alla tua domanda
- Usa
nrow(data)per contare ogni riga. - Usa
sum(condition)onrow(data[condition, , drop = FALSE])per contare le righe selezionate da una condizione. - Usa
filter()enrow()quando vuoi contare le righe filtrate condplyr; usacount()quando vuoi le frequenze per gruppo.
Queste scelte mantengono esplicito il significato del risultato: totale delle righe, righe che soddisfano una condizione o una tabella di frequenze. Verifica che le colonne usate in una condizione o in un’espressione di raggruppamento rappresentino i valori che intendi contare.