统计每个组内的行数
我有一个数据框,我想统计每个组内的行数。 我正常使用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)