HOWTO · R
Como contar o número de observações em R
Conte cada linha, linhas que atendem a condições ou ocorrências por grupo em um data frame do R com R base e dplyr.
Nesta página
Em um data frame do R, uma observação é uma linha. Use nrow() para o número total de observações, uma condição lógica com sum() para linhas correspondentes, ou count() do dplyr para frequências por grupo. Os exemplos usam um data frame pequeno para que você possa adaptar os nomes das colunas aos seus próprios dados.
Contar todas as linhas com nrow()
nrow(data) retorna o número de linhas em data. É a escolha direta quando cada linha deve ser contada. O exemplo tem cinco linhas, e nrow(students) fornece o valor impresso abaixo.
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
Para uma contagem total de linhas, nrow() é mais claro do que construir um vetor lógico. Em particular, with(data, 1) avalia o escalar 1; ele não cria um valor para cada linha, portanto sum(with(data, 1)) não é um método de contagem de linhas.
Contar linhas que atendem a condições no R base
Para contar linhas que atendem a uma condição, crie um vetor lógico e passe-o para sum(). No R, TRUE contribui com 1 e FALSE contribui com 0 quando somados. Você pode usar with() para se referir às colunas do data frame sem repetir o nome do data frame:
sum(with(students, passed))
Para várias condições, combine-as com & para “e” ou | para “ou”. Por exemplo, sum(with(students, passed & group == "B")) conta os alunos que passaram e pertencem ao grupo B. Use parênteses quando eles tornarem uma condição combinada mais fácil de ler.
Se uma condição contiver NA, sum() retorna NA, a menos que você trate esses valores. Use na.rm = TRUE quando valores desconhecidos devem ser excluídos da contagem, como em sum(students$passed, na.rm = TRUE). Para uma expressão como students$score > 70, isso conta apenas as pontuações conhecidas acima de 70; não trata pontuações ausentes como correspondências.
Você também pode criar um subconjunto do data frame e contar suas linhas resultantes com nrow():
nrow(students[students$passed, , drop = FALSE])
O argumento drop = FALSE mantém o subconjunto na forma de data frame mesmo quando ele contém uma única coluna. Se a condição puder conter NA, remova primeiro as linhas desconhecidas do índice lógico, por exemplo students[!is.na(students$passed) & students$passed, , drop = FALSE]; caso contrário, o R base pode incluir uma linha toda de NA para uma condição desconhecida. Use essa abordagem quando precisar das linhas filtradas para um trabalho posterior; use sum() quando só precisar da contagem. Para filtragem seguida de contagem de linhas em outro exemplo, veja contar linhas por grupo.
Contar linhas e grupos com dplyr
O dplyr fornece filter() para selecionar linhas e count() para relatar quantas linhas ocorrem em cada grupo. Essas operações respondem a perguntas diferentes: use filter() seguido de nrow() para o número de linhas que atendem a uma condição, e use count() quando quiser uma frequência para cada valor ou combinação de valores.
Por exemplo, nrow(dplyr::filter(students, passed)) conta os alunos cujo valor de passed é TRUE; filter() descarta linhas quando sua condição é NA. Para contar observações em cada grupo, use dplyr::count(students, group). Para contar combinações, forneça mais colunas de agrupamento, como em dplyr::count(students, group, passed). Essas chamadas são ilustrativas e não executadas aqui; a evidência de execução fornecida cobre apenas o exemplo do total de linhas.
count() retorna as colunas de agrupamento e uma coluna de contagem chamada n por padrão. Seu argumento wt, em vez disso, soma uma coluna de peso dentro de cada grupo, o que é um total ponderado em vez de um número comum de linhas. Para uma contagem simples de observações, deixe wt sem definição.
Escolha o método que corresponde à sua pergunta
- Use
nrow(data)para contar cada linha. - Use
sum(condition)ounrow(data[condition, , drop = FALSE])para contar linhas selecionadas por uma condição. - Use
filter()enrow()quando quiser contar linhas filtradas com odplyr; usecount()quando quiser frequências por grupo.
Essas escolhas mantêm explícito o significado do resultado: total de linhas, linhas que atendem a uma condição ou uma tabela de frequências. Verifique se as colunas usadas em uma condição ou expressão de agrupamento representam os valores que você pretende contar.