如何使用tapply处理R中的重复数据

如何使用tapply处理R中的重复数据,r,tapply,R,Tapply,这是我的数据帧: x day month 5 1 1 4 1 1 1 2 1 3 2 1 5 1 2 2 1 2 5 2 2 3 2 2 我需要取每个月每天的x值之和。 我已经试过了: tapply(DF$x, DF$day, max) 但是它没有给出正确的答案。尝试数据。表包: library(data.table) DT<-data.table(df) DT[, list(Sum=sum(x)), by = c("day","month")] day month Su

这是我的数据帧:

x day month
5 1 1
4 1 1 
1 2 1
3 2 1
5 1 2
2 1 2
5 2 2
3 2 2
我需要取每个月每天的x值之和。 我已经试过了:

tapply(DF$x, DF$day, max) 

但是它没有给出正确的答案。

尝试
数据。表
包:

library(data.table)
DT<-data.table(df)
DT[, list(Sum=sum(x)), by = c("day","month")]

    day month Sum
1:   1     1  9
2:   2     1  4
3:   1     2  7
4:   2     2  8
sqldf("select  day, month, sum(x) as sum from DT group by day, month")
使用基本
聚合
功能:

aggregate(DT$x, FUN=sum, by = list(DT$day, DT$month))
弗兰克建议的更干净的方法:

aggregate(x~day+month, DT, sum)
使用
dplyr
软件包:(按照Frank的建议)


由于问题标题是关于
tapply
,而
正确答案不在OP的帖子中,如果我们需要交叉表格版本,那么
tapply
的一个选项是将分组变量放在
列表中,并将
FUN
指定为
sum

with(DF, tapply(x, list(day, month), FUN=sum))
#  1 2
#1 9 7
#2 4 8
xtabs(x~day+month, DF)
#    month
#day 1 2
#   1 9 7
#   2 4 8

也可以使用
xtabs
完成此操作。默认选项是
sum

with(DF, tapply(x, list(day, month), FUN=sum))
#  1 2
#1 9 7
#2 4 8
xtabs(x~day+month, DF)
#    month
#day 1 2
#   1 9 7
#   2 4 8

或通过
by

by(DF[1], DF[-1], FUN= sum)