webentwicklung-frage-antwort-db.com.de

anzahl der Einträge im Datenrahmen in R

Ich suche eine Zählung für den folgenden Datenrahmen:

> 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

von der Anzahl der Kinder, die glauben. Welchen Befehl würde ich benutzen, um das zu bekommen?

(Der tatsächliche Datenrahmen ist viel größer. Ich habe Ihnen gerade die ersten vier Zeilen gegeben ...)

Vielen Dank!

24
Michael

Sie könnten table verwenden:

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 
37
rcs

Ich halte das für einen zweistufigen Prozess: 

  1. subset den ursprünglichen Datenrahmen gemäß dem gelieferten Filter (Believe == FALSE); dann

  2. holen Sie sich die Zeilenanzahl dieser Teilmenge

Im ersten Schritt ist die Funktionsubseteine gute Möglichkeit, dies zu tun (nur eine Alternative zum normalen Index oder zur Klammer - Notation).

Für den zweiten Schritt würde ichdimodernrowverwenden.

Ein Vorteil der Verwendung von subset: Sie müssen das Ergebnis nicht parsen, um das gewünschte Ergebnis zu erhalten. Rufen Sie einfach nrow direkt darauf auf.

also in deinem Fall:

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

oder in eine anonyme Funktion eingebettet:

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

>> fnx(Believe, TRUE)
      3

Abgesehen von nrow erledigt dim auch die Arbeit. Diese Funktion gibt die dimensions eines Datenrahmens (Zeilen, Spalten) zurück, sodass Sie nur den entsprechenden Index angeben müssen, um auf die Anzahl der Zeilen zuzugreifen: 

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

Eine Antwort auf das zuvor veröffentlichte OP zeigt die Verwendung einer Kontingenztabelle. Ich mag diesen Ansatz nicht für das allgemeine Problem, wie es im OP vorgetragen wurde. Hier ist der Grund. Zugegeben, das allgemeine Problem von wie viele Zeilen in diesem Datenrahmen haben in Spalte C den Wert x? kann sowohl mit einer Kontingenztabelle als auch mit einem "Filter" -Schema beantwortet werden (wie in meiner Antwort hier). Wenn Sie Zeilenzahlen für alle Werte für eine bestimmte Faktorvariable (Spalte) wünschen, ist eine Kontingenztabelle (über den Aufruf von table und Übergeben der interessierenden Spalte (n)) die sinnvollste Lösung. Das OP fragt jedoch nach der Zählung eines bestimmten - Werts in einer Faktorvariablen und nicht über alle Werte. Abgesehen von dem Performance-Hit (kann groß sein, kann trivial sein, hängt nur von der Größe des Datenrahmens und dem Kontext der Verarbeitungspipeline ab, in dem sich diese Funktion befindet). Und wenn das Ergebnis des Aufrufs an die Tabelle zurückgegeben wurde, müssen Sie natürlich parse aus diesem Ergebnis nur die gewünschte Anzahl berechnen. 

Deshalb ist das für mich ein Filterungsproblem und kein Kreuztabellenproblem.

22
doug
sum(Santa$Believe)
14
Carl

Sie können summary(santa$Believe) ausführen und erhalten die Zählung für TRUE und FALSE.

2
Brenda D'Acunha

Eine einzeilige Lösung mit data.table könnte sein

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

mit sqldf passt hierher:

library(sqldf)
sqldf("SELECT Believe, Count(1) as N FROM Santa
       GROUP BY Believe")
0
OmG

DPLYR macht das wirklich einfach. 

x<-santa%>%
   count(Believe)

Wenn Sie nach einer Gruppe zählen wollten; Zum Beispiel, wie viele Männer v Frauen glauben, fügen Sie einfach einen group_by hinzu:

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