Frage

Ich bin auf der Suche, um eine Zählung der folgenden Daten Rahmen:

> 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 sollte ich verwenden, um dies zu erhalten?

(Die tatsächlichen Datenrahmen ist viel größer.Ich habe Ihnen die ersten vier Zeilen...)

Vielen Dank!

War es hilfreich?

Lösung

Sie könnte verwenden 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 

Andere Tipps

Ich denke, dass dies als ein zwei-Schritt-Prozess:

  1. Teilmenge der ursprünglichen Daten-Frames entsprechend der filter im Lieferumfang (Glauben==FALSE);dann

  2. Holen Sie sich die Zeilenanzahl von dieser Teilmenge

Für den ersten Schritt, die Teilmenge Funktion ist ein guter Weg, dies zu tun (nur eine alternative zu gewöhnlichen index oder Halterung notation).

Für den zweiten Schritt würde ich verwenden dim oder nrow

Ein Vorteil bei der Verwendung Teilmenge:Sie brauchen nicht zu analysieren, die das Ergebnis zurückgibt, um das Ergebnis zu erhalten, die Sie benötigen-einfach anrufen nrow auf es direkt.

also in deinem Fall:

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

oder eingewickelt in ein anonyme Funktion:

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

>> fnx(Believe, TRUE)
      3

Abgesehen von nrow, dim wird auch die Arbeit machen.Diese Funktion gibt den Abmessungen ein Daten-frame (rows, cols), so müssen Sie nur geben Sie den entsprechenden index, um den Zugriff auf die Anzahl der Zeilen:

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

Eine Antwort auf den OP geschrieben werden, bevor dies zeigt sich die Verwendung von einer Kontingenz-Tabelle.Ich weiß nicht, wie dieser Ansatz für das Allgemeine problem, als rezitierte in den OP.Hier ist der Grund.Zugegeben, das Allgemeine problem wie viele Zeilen in diesem data-frame-Wert x in Spalte C? beantwortet werden können mit einem Kontingenz-Tabelle als auch als mit einem "Filter" - Schema (wie in meiner Antwort hier).Wenn Sie möchten, dass die Zeilenanzahl für alle Werte für einen bestimmten Faktor-variable (Spalte) und dann a contingency table (via aufrufen Tabelle und vorbei in die Spalte(N) von Interesse) ist die vernünftigste Lösung;doch die OP fragt nach der Zählung eines insbesondere Wert in einer variable Faktor, nicht zählt über alle Werte.Abgesehen von der performance-hit (könnte groß sein, könnte trivial sein, hängt nur von der Größe der Daten-frame und die Verarbeitung pipeline-Kontext, in denen diese Funktion befindet).Und natürlich einmal das Ergebnis aus dem Aufruf-Tabelle ist zurückgegeben, haben Sie immer noch analysieren von diesem Ergebnis nur die zählen, die Sie möchten.

So das ist, warum, zu mir, das ist eine Filterung statt einer cross-tab problem.

sum(Santa$Believe)

Können Sie tun summary(santa$Believe) - und erhalten Sie die Zählung für die TRUE und FALSE

DPLYR macht das wirklich einfach.

x<-santa%>%
   count(Believe)

Wenn Sie wollte, um zu zählen, indem Sie eine Gruppe;zum Beispiel, wie viele Männer v Frauen glauben, fügen Sie einfach einen group_by:

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

Ein one-line - Lösung mit data.table könnte sein

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

Verwendung sqldf hier passt:

library(sqldf)
sqldf("SELECT Believe, Count(1) as N FROM Santa
       GROUP BY Believe")
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top