根据R中的因子级别进行聚合(创建新列?)
我有一个日期数组和一个类别数组。我想按日期聚合类别数组,计算出现的次数。如果我这样做:根据R中的因子级别进行聚合(创建新列?),r,aggregate,R,Aggregate,我有一个日期数组和一个类别数组。我想按日期聚合类别数组,计算出现的次数。如果我这样做: array <- aggregate(array$category,by=list(array$date),FUN="length") 我想我必须创建新的数组来保存每个类别的出现。我已经编写了一个函数,在每个级别上执行for循环并创建一个新数组,但是我想知道是否有一种更快(并且代码更少)的方法来实现这一点 谢谢大家! 这里有两种可能的简单解决方案(我将称您的数据集为df,尽管它的名称并不比数组更好)
array <- aggregate(array$category,by=list(array$date),FUN="length")
我想我必须创建新的数组来保存每个类别的出现。我已经编写了一个函数,在每个级别上执行for循环并创建一个新数组,但是我想知道是否有一种更快(并且代码更少)的方法来实现这一点
谢谢大家! 这里有两种可能的简单解决方案(我将称您的数据集为
df
,尽管它的名称并不比数组
更好)
或
还是用R基
df$occurrences <- 1
aggregate(occurrences ~ date + category, df, sum)
# date category occurrences
# 1 04/07/2012 1 1
# 2 03/07/2012 3 1
# 3 05/07/2012 3 6
# 4 05/07/2012 4 4
# 5 05/07/2012 5 8
这里有两种可能的简单解决方案(我将您的数据集称为
df
,尽管它的名称并不比array
更好)
或
还是用R基
df$occurrences <- 1
aggregate(occurrences ~ date + category, df, sum)
# date category occurrences
# 1 04/07/2012 1 1
# 2 03/07/2012 3 1
# 3 05/07/2012 3 6
# 4 05/07/2012 4 4
# 5 05/07/2012 5 8
@akrun,我认为OP正在寻找
库(data.table);setDT(数组)[,.N,.(类别,日期)]
@DavidArenburg是的,我没有测试它。谢谢,这就成功了,谢谢你@akrun,我认为OP正在寻找库(data.table);setDT(数组)[,.N,.(类别,日期)]
@DavidArenburg是的,我没有测试它。谢谢,这就成功了,谢谢你!我很感谢你的意见,谢谢!我更喜欢dplyr的解决方案,但我想这是一件很有品味的事情。你也可以用base R轻松地完成它,请参见我的编辑,尽管我选择的工具总是数据。表。我感谢你的输入,谢谢!我更喜欢dplyr的解决方案,但我想这是一件很有品味的事情。你也可以用base R轻松地完成它,请参见我的编辑,尽管我选择的工具总是data.table
。
library(dplyr)
df %>%
group_by(date, category) %>%
summarise(occurrences = n())
# Source: local data table [5 x 3]
# Groups: date
#
# date category occurrences
# 1 05/07/2012 3 6
# 2 05/07/2012 4 4
# 3 05/07/2012 5 8
# 4 03/07/2012 3 1
# 5 04/07/2012 1 1
df$occurrences <- 1
aggregate(occurrences ~ date + category, df, sum)
# date category occurrences
# 1 04/07/2012 1 1
# 2 03/07/2012 3 1
# 3 05/07/2012 3 6
# 4 05/07/2012 4 4
# 5 05/07/2012 5 8
subset(as.data.frame(table(df[2:1])), !!Freq)