如何在 R 中对重复数据使用 tapply
how to use tapply for repeated data in R
这是我的数据框:
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)
但它没有给出正确的答案。
试试 data.table
包:
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
包:
sqldf("select day, month, sum(x) as sum from DT group by day, month")
OR 使用基础 aggregate
函数:
aggregate(DT$x, FUN=sum, by = list(DT$day, DT$month))
弗兰克建议的更简洁的方法:
aggregate(x~day+month, DT, sum)
或 使用 dplyr
包:(按照 Frank 的建议)
DT %>%
group_by(day,month) %>%
summarise(Sum = sum(x))
由于问题标题是关于 tapply
而 right answer
不在 OP 的 post 中,如果我们需要 cross-tabular 版本,一个选项 tapply
将把分组变量放在 list
中,并将 FUN
指定为 sum
with(DF, tapply(x, list(day, month), FUN=sum))
# 1 2
#1 9 7
#2 4 8
或者可以用 xtabs
来完成。默认选项是 sum
xtabs(x~day+month, DF)
# month
#day 1 2
# 1 9 7
# 2 4 8
或者用by
by(DF[1], DF[-1], FUN= sum)
这是我的数据框:
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)
但它没有给出正确的答案。
试试 data.table
包:
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
包:
sqldf("select day, month, sum(x) as sum from DT group by day, month")
OR 使用基础 aggregate
函数:
aggregate(DT$x, FUN=sum, by = list(DT$day, DT$month))
弗兰克建议的更简洁的方法:
aggregate(x~day+month, DT, sum)
或 使用 dplyr
包:(按照 Frank 的建议)
DT %>%
group_by(day,month) %>%
summarise(Sum = sum(x))
由于问题标题是关于 tapply
而 right answer
不在 OP 的 post 中,如果我们需要 cross-tabular 版本,一个选项 tapply
将把分组变量放在 list
中,并将 FUN
指定为 sum
with(DF, tapply(x, list(day, month), FUN=sum))
# 1 2
#1 9 7
#2 4 8
或者可以用 xtabs
来完成。默认选项是 sum
xtabs(x~day+month, DF)
# month
#day 1 2
# 1 9 7
# 2 4 8
或者用by
by(DF[1], DF[-1], FUN= sum)