使用不同的变量类时,使用ddply输出奇怪的输出

时间:2014-10-24 12:17:07

标签: r class plyr

使用ddply将函数应用于两个不同的变量时,我得到了一些奇怪的输出。它实际上正确地完成了任务,但随后假设输出的格式基于我的c(var1, var2)中首先命名的变量

我尝试实现的目标是按Conversion.ID对我的数据框进行分组,找到最大日期,如果发生了点击,我认为这很简单。

> class(wrk.ds$intr.date.time)
[1] "POSIXct" "POSIXt" 
> class(wrk.ds$type.bin)
[1] "numeric"

> wrk.ds.1 <- ddply(wrk.ds, .(Conversion.ID), function(wrk.ds){
+                 click.check = as.numeric(max(wrk.ds$type.bin))
+                 max.intr.date.time = max(wrk.ds$intr.date.time)
+                 c(click.check, max.intr.date.time )})
> head(wrk.ds.1)
  Conversion.ID V1         V2
1  8.930874e+15  1 1406473200
2  4.266128e+16  0 1407955140
3  1.241770e+17  0 1409494260
4  1.309763e+17  1 1407238560
5  1.367159e+17  1 1408196760
6  1.417151e+17  0 1409251260
> 
> #Reversing the c() order
> wrk.ds.1 <- ddply(wrk.ds, .(Conversion.ID), function(wrk.ds){
+                 click.check = as.numeric(max(wrk.ds$type.bin))
+                 max.intr.date.time = max(wrk.ds$intr.date.time)
+                 c(max.intr.date.time, click.check)})
> head(wrk.ds.1)
  Conversion.ID                  V1                  V2
1  8.930874e+15 2014-07-27 16:00:00 1970-01-01 01:00:01
2  4.266128e+16 2014-08-13 19:39:00 1970-01-01 01:00:00
3  1.241770e+17 2014-08-31 15:11:00 1970-01-01 01:00:00
4  1.309763e+17 2014-08-05 12:36:00 1970-01-01 01:00:01
5  1.367159e+17 2014-08-16 14:46:00 1970-01-01 01:00:01
6  1.417151e+17 2014-08-28 19:41:00 1970-01-01 01:00:00

我的解决方法是分两步完成这些工作,但我真的更好奇知道这是否可以修复。

我已尝试过以下内容,但无济于事。

wrk.ds.1 <- ddply(wrk.ds, .(Conversion.ID), function(wrk.ds){
                click.check = as.numeric(max(wrk.ds$type.bin))
                max.intr.date.time = max(wrk.ds$intr.date.time)
                c(click.check, as.POSIXct(max.intr.date.time ))})

作为一个奖励问题,任何人都可以告诉我我新创建的变量的标签没有被分配

1 个答案:

答案 0 :(得分:1)

传递给ddply的匿名函数应该返回一个data.frame,你的是返回一个向量。改变它:

wrk.ds.1 <- ddply(wrk.ds, .(Conversion.ID), function(DF){
                 click.check = max(DF$type.bin)
                 max.intr.date.time = max(DF$intr.date.time)
                 data.frame(click.check, max.intr.date.time )})

当然,您应该使用summarise代替:

wrk.ds.1 <- ddply(wrk.ds, .(Conversion.ID), summarise,
                   click.check = max(type.bin),
                   max.intr.date.time = max(intr.date.time))  
相关问题