如何在R中使用tapply重复数据

时间:2016-02-21 06:26:43

标签: r tapply

这是我的数据框:

dictionary={
 "1":"Number one"
 "2":"Number two"
 "3":"Number three"}

x = raw_input()
print dictionary[str(x)]

我需要在每个月中获取每天x值的总和。 我已经尝试过了:

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

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

2 个答案:

答案 0 :(得分:2)

试用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")

使用基础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))

答案 1 :(得分:2)

由于问题标题大约是tapplyright answer不在OP的帖子中,如果我们需要跨表格版本,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)