我有一个数据帧,我想计算每组内的行数 . 我定期使用 aggregate
函数对数据求和如下:
df2 <- aggregate(x ~ Year + Month, data = df1, sum)
现在,我想计算观察但似乎无法找到 FUN
的正确参数 . 直觉上,我认为它会如下:
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))
12 回答
还有
df2 <- count(x, c('Year','Month'))
(plyr包)按照@Joshua 's suggestion, here'的方法,您可以计算
df
数据框中Year
= 2007和Month
= 11月(假设它们是列)的观测数量:以及_GregSnow之后的
aggregate
:我们也可以使用
dplyr
.首先,一些数据:
伯爵:
我们也可以使用稍长版本的管道和
n()
功能:或
tally
功能:没有
data.table
解决方案的旧问题 . 所以这里......使用
.N
与
aggregate
一起使用的简单选项是length
函数,它将为您提供子集中向量的长度 . 有时候更健壮的是使用function(x) sum( !is.na(x) )
.为每行创建一个值为1的新变量
Count
:然后聚合数据帧,由
Count
列求和:在这种情况下,
aggregate()
函数的替代方法是table()
,带有as.data.frame()
,这也表示年份和月份的哪些组合与零次出现相关联并且没有零发生的组合
对于我的聚合,我通常最终希望看到平均值和“这个群体有多大”(长约一小时) . 所以这是我在这些场合的便利片段;
使用
sqldf
包的sql解决方案:考虑到@Ben的答案,如果
df1
不包含x
列,则R会抛出错误 . 但它可以用paste
优雅地解决:同样,如果在分组中使用两个以上的变量,则可以进行推广:
您可以使用
by
函数作为by(df1$Year, df1$Month, count)
,它将生成所需聚合的列表 .输出看起来像,