根据组计算R中数据框中的行数

时间:2014-08-13 17:59:02

标签: r dataframe rowcount

我在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))

但它没有产生所需的输出。我怎么能这样做?

8 个答案:

答案 0 :(得分:36)

count()中的plyr功能可以满足您的需求:

library(plyr)

count(mydf, "MONTH-YEAR")

答案 1 :(得分:30)

以下是一个示例,其中显示了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

以下是以两种输出显示格式计算每组的行数:

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

答案 2 :(得分:11)

使用Ananda dummied的示例数据集,这是使用aggregate()的示例,它是核心R的一部分。aggregate()只需要计算一些事物来计算{{1的不同值的函数}}。在这种情况下,我使用MONTH-YEAR作为计算的东西:

VALUE

给你..

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

答案 3 :(得分:6)

尝试在dplyr中使用count函数:

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

我不确定你如何将MONTH-YEAR作为变量名称。我的R版本不允许这样的变量名,所以我用MONTH.YEAR替换它。

作为旁注,代码中的错误是没有dat1_frame %.% group_by(MONTH-YEAR)函数的summarise返回原始数据框而没有任何修改。所以,你想使用

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

答案 4 :(得分:5)

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

这将为您提供答案,如果&#34; MONTH-YEAR&#34;是一个变量。 首先,尝试唯一(数据$ MONTH-YEAR)并查看它是否返回唯一值(没有重复)。

然后,上面简单的split-apply-combine将返回您要查找的内容。

答案 5 :(得分:3)

只是为了完成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

答案 6 :(得分:0)

假设我们有一个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 summary函数将从factor参数创建一个表,然后为结果创建一个向量(第7行和第8行)

答案 7 :(得分:0)

以下是使用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