统计每个组内的行数
我有一个数据框,我想统计每个组内的行数。 我正常使用aggregate函数来aggregate数据如下: 
 df2 <- aggregate(x ~ Year + Month, data = df1, sum) 
现在,我想统计观察,但似乎无法find合适的论据。 直觉上,我认为这将如下:
 df2 <- aggregate(x ~ Year + Month, data = df1, count) 
但是,没有这样的运气。
有任何想法吗?
一些玩具数据:
 set.seed(2) df1 <- data.frame(x = 1:20, Year = sample(2012:2014, 20, replace = TRUE), Month = sample(month.abb[1:3], 20, replace = TRUE)) 
	
 还有df2 <- count(x, c('Year','Month')) (plyr包) 
 遵循@ Joshua的build议,这里有一种方法可以计算出你的df数据框中Year = 2007和Month = Nov(假设它们是列)的观测值的数量: 
 nrow(df[,df$YEAR == 2007 & df$Month == "Nov"]) 
 并与aggregate ,遵循@GregSnow: 
 aggregate(x ~ Year + Month, data = df, FUN = length) 
 我们也可以使用dplyr 。 
首先,一些数据:
 df <- data.frame(x = rep(1:6, rep(c(1, 2, 3), 2)), year = 1993:2004, month = c(1, 1:11)) 
现在,伯爵:
 library(dplyr) count(df, year, month) #piping df %>% count(year, month) 
 我们也可以使用pipe道和n()函数稍微长一点的版本: 
 df %>% group_by(year, month) %>% summarise(number = n()) 
或“计数function”
 df %>% group_by(year, month) %>% tally() 
 没有data.table解决scheme的老问题。 所以这里… 
 使用.N 
 library(data.table) DT <- data.table(df) DT[, .N, by = list(year, month)] 
 用于aggregate的简单选项是length函数,它将给出子集中vector的长度。 有时更强健的是使用function(x) sum( !is.na(x) ) 。 
 为每一行创build一个值为1的新variablesCount : 
 df1["Count"] <-1 
 然后聚合dataframe,按Count列进行求和: 
 df2 <- aggregate(df1[c("Count")], by=list(year=df1$year, month=df1$month), FUN=sum, na.rm=TRUE) 
 在这种情况下, aggregate()函数的一个替代方法是使用as.data.frame() table() as.data.frame() ,它也会指示Year和Month的哪些组合与零次出现相关联 
 df<-data.frame(x=rep(1:6,rep(c(1,2,3),2)),year=1993:2004,month=c(1,1:11)) myAns<-as.data.frame(table(df[,c("year","month")])) 
而没有零发生的组合
 myAns[which(myAns$Freq>0),] 
对于我的聚合,我通常最终希望看到的意思是“这个组合有多大”(又称长度)。 所以这是我在那些场合的方便片段。
 agg.mean <- aggregate(columnToMean ~ columnToAggregateOn1*columnToAggregateOn2, yourDataFrame, FUN="mean") agg.count <- aggregate(columnToMean ~ columnToAggregateOn1*columnToAggregateOn2, yourDataFrame, FUN="length") aggcount <- agg.count$columnToMean agg <- cbind(aggcount, agg.mean) 
 lw<- function(x){length(which(df$variable==someValue))} agg<- aggregate(Var1~Var2+Var3, data=df, FUN=lw) names(agg)<- c("Some", "Pretty", "Names", "Here") View(agg)