使用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 ))})
作为一个奖励问题,任何人都可以告诉我我新创建的变量的标签没有被分配
答案 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))