Frage Anzahl der Zeilen in einem Datenrahmen in R basierend auf der Gruppe [duplizieren]


Diese Frage hat hier bereits eine Antwort:

Ich habe einen Datenrahmen in R so was:

  ID   MONTH-YEAR   VALUE
  110   JAN. 2012     1000
  111   JAN. 2012     2000
         .         .
         .         .
  121   FEB. 2012     3000
  131   FEB. 2012     4000
         .           .
         .           .

Also, für jeden Monat eines jeden Jahres gibt es n Reihen und sie können in beliebiger Reihenfolge sein (bedeuten, dass sie alle nicht in Kontinuität sind und in Pausen sind). Ich möchte berechnen, wie viele Zeilen für jede Zeile vorhanden sind MONTH-YEAR d.h. wie viele Zeilen gibt es für JAN. 2012, wie viele für FEB. 2012 und so weiter. Etwas wie das:

 MONTH-YEAR   NUMBER OF ROWS
 JAN. 2012     10
 FEB. 2012     13
 MAR. 2012     6
 APR. 2012     9

Ich habe versucht, das zu tun:

n_row <- nrow(dat1_frame %.% group_by(MONTH-YEAR))

aber es produziert nicht die gewünschte Ausgabe. Wie kann ich das tun?


31
2017-08-13 17:59


Ursprung


Antworten:


Hier ist ein Beispiel, das zeigt, wie table(.) (oder, genauer gesagt, Ihre gewünschte Ausgabe, data.frame(table(.)) tut so, wie es sich anhört.

Beachten Sie auch, wie Sie reproduzierbare Beispieldaten in einer Weise teilen, die andere kopieren und in ihre Sitzung einfügen können.

Hier sind die (reproduzierbaren) Beispieldaten:

mydf <- structure(list(ID = c(110L, 111L, 121L, 131L, 141L), 
                       MONTH.YEAR = c("JAN. 2012", "JAN. 2012", 
                                      "FEB. 2012", "FEB. 2012", 
                                      "MAR. 2012"), 
                       VALUE = c(1000L, 2000L, 3000L, 4000L, 5000L)), 
                  .Names = c("ID", "MONTH.YEAR", "VALUE"), 
                  class = "data.frame", row.names = c(NA, -5L))

mydf
#    ID MONTH.YEAR VALUE
# 1 110  JAN. 2012  1000
# 2 111  JAN. 2012  2000
# 3 121  FEB. 2012  3000
# 4 131  FEB. 2012  4000
# 5 141  MAR. 2012  5000

Hier ist die Berechnung der Anzahl der Zeilen pro Gruppe, in zwei Ausgabeformate:

table(mydf$MONTH.YEAR)
# 
# FEB. 2012 JAN. 2012 MAR. 2012 
#         2         2         1

data.frame(table(mydf$MONTH.YEAR))
#        Var1 Freq
# 1 FEB. 2012    2
# 2 JAN. 2012    2
# 3 MAR. 2012    1

27
2017-08-13 18:29



Das count() Funktion in plyr macht was du willst:

library(plyr)

count(mydf, "MONTH-YEAR")

31
2018-01-13 22:36



Unter Verwendung des Beispieldatensatzes, den Ananda getäuscht hat, hier ein Beispiel mit aggregate(), die Teil von Kern R. aggregate() braucht nur etwas als Funktion der verschiedenen Werte von MONTH-YEAR. In diesem Fall habe ich gebraucht VALUE als die Sache zu zählen:

aggregate(cbind(count = VALUE) ~ MONTH.YEAR, 
          data = mydf, 
          FUN = function(x){NROW(x)})

Das gibt dir ..

  MONTH.YEAR count
1  FEB. 2012     2
2  JAN. 2012     2
3  MAR. 2012     1

10
2017-08-13 20:05



library(plyr)
ddply(data, .(MONTH-YEAR), nrow)

Dies gibt Ihnen die Antwort, wenn "MONTH-YEAR" eine Variable ist. Versuchen Sie zunächst einmal unique (Daten $ MONTH-YEAR) und sehen Sie, ob es eindeutige Werte (keine Duplikate) zurückgibt.

Dann wird oberhalb von simple Split-Apply-Combine das zurückgegeben, was Sie suchen.


5
2017-08-13 18:12



Versuchen Sie, die Zählfunktion in dplyr zu verwenden:

library(dplyr)
dat1_frame %>% 
    count(MONTH.YEAR)

Ich bin mir nicht sicher, wie Sie MONTH-YEAR als variablen Namen bekommen haben. Meine R-Version erlaubt keinen solchen Variablennamen, also habe ich ihn durch MONTH.YEAR ersetzt.

Als Randnotiz war der Fehler in Ihrem Code das dat1_frame %.% group_by(MONTH-YEAR) ohne ein summarise Funktion gibt den ursprünglichen Datenrahmen ohne Änderungen zurück. Also, du willst es benutzen

dat1_frame %>%
    group_by(MONTH.YEAR) %>%
    summarise(count=n())

5
2018-05-05 22:35



Nur zur Vervollständigung der data.table Lösung:

library(data.table)

mydf <- structure(list(ID = c(110L, 111L, 121L, 131L, 141L), 
                       MONTH.YEAR = c("JAN. 2012", "JAN. 2012", 
                                      "FEB. 2012", "FEB. 2012", 
                                      "MAR. 2012"), 
                       VALUE = c(1000L, 2000L, 3000L, 4000L, 5000L)), 
                  .Names = c("ID", "MONTH.YEAR", "VALUE"), 
                  class = "data.frame", row.names = c(NA, -5L))

setDT(mydf)
mydf[, .(`Number of rows` = .N), by = MONTH.YEAR]

   MONTH.YEAR Number of rows
1:  JAN. 2012              2
2:  FEB. 2012              2
3:  MAR. 2012              1

2
2018-05-16 13:49



Hier ist eine andere Art zu verwenden aggregate um Zeilen nach Gruppe zu zählen:

my.data <- read.table(text = '
    month.year    my.cov
      Jan.2000     apple
      Jan.2000      pear
      Jan.2000     peach
      Jan.2001     apple
      Jan.2001     peach
      Feb.2002      pear
', header = TRUE, stringsAsFactors = FALSE, na.strings = NA)

rows.per.group  <- aggregate(rep(1, length(my.data$month.year)),
                             by=list(my.data$month.year), sum)
rows.per.group

#    Group.1 x
# 1 Feb.2002 1
# 2 Jan.2000 3
# 3 Jan.2001 2

1
2018-01-14 15:26



Angenommen, wir haben einen df_data Datenrahmen wie unten

> df_data
   ID MONTH-YEAR VALUE
1 110   JAN.2012  1000
2 111   JAN.2012  2000
3 121   FEB.2012  3000
4 131   FEB.2012  4000
5 141   MAR.2012  5000

Um die Anzahl der Zeilen in df_data zu zählen, die nach der Spalte MONTH-YEARY gruppiert sind, können Sie Folgendes verwenden:

> summary(df_data$`MONTH-YEAR`)

FEB.2012 JAN.2012 MAR.2012 
   2        2        1 

enter image description here Die Zusammenfassungsfunktion erstellt eine Tabelle aus dem Faktor-Argument und erstellt dann einen Vektor für das Ergebnis (Zeile 7 und 8).


0
2017-07-20 07:34