Rdataframe中的行数基于组

我有这样的数据框在R

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

因此,每年每个月有n行,他们可以以任何顺序(意思是他们都不是连续的,并在rest)。 我想计算每个MONTH-YEAR有多less行,即JAN有多less行。 2012年,FEB有多less。 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)) 

但它不会产生所需的输出。我该怎么做?

下面是一个例子,它显示了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 

plyr中的count()函数做你想要的:

 library(plyr) count(mydf, "MONTH-YEAR") 

使用Ananda提供的示例数据集,下面是一个使用aggregate()的例子,它是核心R的一部分aggregate()只需要一些东西作为MONTH-YEAR不同值的函数。 在这种情况下,我使用VALUE作为计数的事情:

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

这给你..

  MONTH.YEAR count 1 FEB. 2012 2 2 JAN. 2012 2 3 MAR. 2012 1 
 library(plyr) ddply(data, .(MONTH-YEAR), nrow) 

如果“MONTH-YEAR”是一个variables,这将给你答案。 首先,尝试唯一(数据$ MONTH-YEAR),看看它是否返回唯一值(不重复)。

然后上面的简单拆分应用合并将返回你正在寻找的东西。

尝试在dplyr中使用计数function:

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

我不知道你是如何获得MONTH-YEAR作为一个variables名称。 我的R版本不允许这样的variables名称,所以我用MONTH.YEARreplace了它。

作为一个方面说明,代码中的错误是没有summarise函数的dat1_frame %.% group_by(MONTH-YEAR)没有任何修改就返回原始dataframe。 所以,你想使用

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

这里是使用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 

只是为了完成data.table解决scheme:

 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 

假设我们有一个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 

在这里输入图像描述 汇总函数将从因子参数中创build一个表格,然后为结果创build一个向量(第7和8行)