R-tapply 不保持日期格式

标签 r function date tapply

我需要通过 id_client 对日期进行快速聚合:最小值、最大值、月份日期差异以及月份数量。

示例表:

tbl<-data.frame(id_cliente=c(1,1,1,1,2,3,3,3), 
fecha=c('2013-01-01', '2013-06-01','2013-05-01', '2013-04-01', '2013-01-01', '2013-01-01','2013-05-01','2013-04-01'))

格式化日期:

tbl$fecha<-as.Date(as.character(tbl$fecha))

我的第一个方法是 ddply:

tbl2<-ddply(tbl, .(id_cliente), summarize, cant=length(id_cliente), 
max=max(fecha), min=min(fecha),
dif=length(seq(from=min, to=max, by='month')))

我得到了想要的结果,但是使用我的真实表需要太多时间。 所以我尝试了tapply:

tbl3<-data.frame(cbind(dif=tapply(tbl$fecha, list(tbl$id_cliente), secuencia),
        hay=tapply(tbl$fecha, list(tbl$id_cliente), length),
        min=tapply(tbl$fecha, list(tbl$id_cliente), min),
        max=tapply(tbl$fecha, list(tbl$id_cliente), max)
        ))

结果是:

> tbl3
  dif hay   min   max
   6   4 15706 15857
   1   1 15706 15706
   5   3 15706 15826

在这种情况下,我得到的不是日期,而是数字。因此,由于以下工作有效,我尝试在tapply中使用as.Date:

as.Date(15706, origin='1970-01-01')

MIN<-function(x){as.Date(min(x), origin='1970-01-01')}

该函数可以工作,但使用tapply 则不行。

tbl3<-data.frame(cbind(min=tapply(tbl$fecha, list(tbl$id_cliente), MIN)))

我仍然得到的是号码而不是日期。 我该如何解决这个问题?谢谢。

最佳答案

我知道这有点晚了,但我想我应该把它放在这里,以便那些仍在谷歌上搜索这个问题的人。

有趣的是,当您将日期列保留为文本格式时,tapply 会返回正确的结果,然后您可以转换为以下日期:

tbl<-data.frame(id_cliente=c(1,1,1,1,2,3,3,3), 
                fecha=c('2013-01-01', '2013-06-01','2013-05-01', '2013-04-01', '2013-01-01', '2013-01-01','2013-05-01','2013-04-01'))
tbl3<-data.frame(cbind(dif=tapply(tbl$fecha, list(tbl$id_cliente), seq),
                        hay=tapply(tbl$fecha, list(tbl$id_cliente), length),
                        min=tapply(tbl$fecha, list(tbl$id_cliente), min),
                        max=tapply(tbl$fecha, list(tbl$id_cliente), max))) 
head(tbl3)
#         dif hay        min        max
# 1, 2, 3, 4   4 2013-01-01 2013-06-01
#          1   1 2013-01-01 2013-01-01
#    1, 2, 3   3 2013-01-01 2013-05-01

关于R-tapply 不保持日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34119968/

相关文章:

c - 在 c 用户输入中编译错误

javascript - 完整日历日单击并解决了时区更改的事件日期问题

r - 保存无边距的 ggplot2 对象的 png

r - 如何修改多个数据框而不创建它们的列表然后使用 lapply?

氧气 : export imported function

C 不使用 fscanf 从 txt 读取整数

r - 如何在 df 中添加具有特定条件的列

mysql - 在 mysql : Performance comparison between various methods for Date 中存储日期

r - 当我使用滞后函数时,如何将前一行中的 "skip"日期与当前行中的日期相同?

r - 使用散列对 R Shiny 应用程序的一部分进行简单的密码保护