Pergunta

Estou procurando uma contagem para o seguinte quadro de dados:

> Santa
   Believe Age Gender Presents Behaviour
1    FALSE   9   male       25   naughty
2     TRUE   5   male       20      nice
3     TRUE   4 female       30      nice
4     TRUE   4   male       34   naughty

do número de crianças que acreditam. Que comando eu usaria para conseguir isso?

(O quadro de dados real é muito maior. Acabei de lhe dar as quatro primeiras linhas ...)

Obrigado!

Foi útil?

Solução

Você poderia usar table:

R> x <- read.table(textConnection('
   Believe Age Gender Presents Behaviour
1    FALSE   9   male       25   naughty
2     TRUE   5   male       20      nice
3     TRUE   4 female       30      nice
4     TRUE   4   male       34   naughty'
), header=TRUE)

R> table(x$Believe)

FALSE  TRUE 
    1     3 

Outras dicas

Eu penso nisso como um processo de duas etapas:

  1. subcet O quadro de dados original de acordo com o filtro fornecido (acredite == false); então

  2. Obtenha a contagem de linhas deste subconjunto

Para o primeiro passo, o subconjunto A função é uma boa maneira de fazer isso (apenas uma alternativa ao índice comum ou suporte notação).

Para a segunda etapa, eu usaria escurecido ou nrow

Uma vantagem de usar subconjunto: Você não precisa analisar o resultado que ele retorna para obter o resultado de que você precisa-apenas ligue nrow nele diretamente.

Então, no seu caso:

v = nrow(subset(Santa, Believe==FALSE))     # 'subset' returns a data.frame

ou envolto em um função anônima:

>> fnx = function(fac, lev){nrow(subset(Santa, fac==lev))}

>> fnx(Believe, TRUE)
      3

Além de nrow, escurecido também fará o trabalho. Esta função retorna o dimensões de um quadro de dados (linhas, cols), então você só precisa fornecer o índice apropriado para acessar o número de linhas:

v = dim(subset(Santa, Believe==FALSE))[1] 

Uma resposta para o OP publicada antes deste mostra o uso de uma tabela de contingência. Não gosto dessa abordagem para o problema geral, conforme recitado no OP. Aqui está o motivo. Concedido, o problema geral de Quantas linhas nesse quadro de dados têm valor x na coluna C? Pode ser respondido usando uma tabela de contingência, além de usar um esquema de "filtragem" (como na minha resposta aqui). Se você deseja contagens de linha para todos os valores para uma determinada variável de fator (coluna), uma tabela de contingência (via chamada tabela e passar na (s) coluna (s) de interesse) é a solução mais sensata; No entanto, o OP pede a contagem de um especial valor em uma variável de fator, não conta em todos os valores. Além do sucesso do desempenho (pode ser grande, pode ser trivial, apenas depende do tamanho do quadro de dados e do contexto do pipeline de processamento em que essa função reside). E, claro, uma vez que o resultado da chamada para a tabela é devolvido, você ainda precisa analisar A partir desse resultado, apenas a contagem que você deseja.

Então é por isso que, para mim, isso é uma filtragem e não um problema de abrasco.

sum(Santa$Believe)

Você pode fazer summary(santa$Believe) E você receberá a contagem para TRUE e FALSE

O DPLYR torna isso realmente fácil.

x<-santa%>%
   count(Believe)

Se você quisesse contar por um grupo; Por exemplo, quantos homens vsem de mulheres acreditam, basta adicionar um group_by:

x<-santa%>%
   group_by(Gender)%>%
   count(Believe)

UMA uma linha solução com data.table poderia ser

library(data.table)
setDT(x)[,.N,by=Believe]
   Believe N
1:   FALSE 1
2:    TRUE 3

usando sqldf se encaixa aqui:

library(sqldf)
sqldf("SELECT Believe, Count(1) as N FROM Santa
       GROUP BY Believe")
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top