web-dev-qa-db-ja.com

グループに基づいてRのデータフレーム内の行数をカウントする

次のようなRにデータフレームがあります。

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

そのため、各年の各月にはn行があり、任意の順序にすることができます(すべてが連続しておらず、休憩していることを意味します)。各MONTH-YEARの行数、つまりJANの行数を計算します。 2012年、FEBの数。 2012など。このようなもの:

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

私はこれをやろうとしました:

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

しかし、それは目的の出力を生成しません。

36
Jason Donnald

table(.)(または、希望する出力により厳密に一致するdata.frame(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))

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

以下は、2つの出力表示形式でのグループごとの行数の計算です。

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
31

plyrcount()関数は、必要なことを行います。

library(plyr)

count(mydf, "MONTH-YEAR")
41
Head

Dplyrでcount関数を使用してみてください。

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

MONTH-YEARを変数名としてどのように取得したかわかりません。私のRバージョンでは、このような変数名を使用できないため、MONTH.YEARに置き換えました。

副次的な注意点として、コードの間違いは、summarise関数なしのdat1_frame %.% group_by(MONTH-YEAR)が変更なしで元のデータフレームを返すことでした。だから、使用したい

dat1_frame %>%
    group_by(MONTH.YEAR) %>%
    summarise(count=n())
6
Kate
library(plyr)
ddply(data, .(MONTH-YEAR), nrow)

「MONTH-YEAR」が変数の場合、これにより答えが得られます。まず、unique(data $ MONTH-YEAR)を試して、一意の値(重複なし)が返されるかどうかを確認します。

次に、上記の単純なsplit-apply-combineは、探しているものを返します。

5
won782

Data.tableソリューションを完成させるためだけに:

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
3
User2321

次のようなdf_dataデータフレームがあるとします

> 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

MONTH-YEAR列でグループ化されたdf_dataの行数をカウントするには、次を使用できます。

> summary(df_data$`MONTH-YEAR`)

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

enter image description here サマリー関数は、factor引数からテーブルを作成し、結果のベクトルを作成します(7行目と8行目)

0
Tung Nguyen

aggregateを使用してグループごとに行をカウントする別の方法を次に示します。

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
0
Mark Miller