Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 计算日期之间的平均时间_R - Fatal编程技术网

R 计算日期之间的平均时间

R 计算日期之间的平均时间,r,R,我很难计算csv付款日期之间的平均时间。我尝试了多种我在网上看到的方法(改为data.table,使用ddply),但没有成功 WorkerID PaymentDate 1 2015-07-18 1 2015-08-18 3 2015-09-18 4 2015-10-18 4 2015-11-18 这是我的数据集的一个例子——我想用最简单的方法计算两个付款日期之间的平均时间(以天数为单位)。我想按工号分组。 谢谢大家! 这

我很难计算csv付款日期之间的平均时间。我尝试了多种我在网上看到的方法(改为data.table,使用ddply),但没有成功

WorkerID  PaymentDate
 1       2015-07-18
 1       2015-08-18
 3       2015-09-18
 4       2015-10-18
 4       2015-11-18
这是我的数据集的一个例子——我想用最简单的方法计算两个付款日期之间的平均时间(以天数为单位)。我想按工号分组。
谢谢大家!

这是
aggregate()
的完美工作。它按
WorkerID
PaymentDate
进行分组,并将函数
mean(diff(.)
应用于每个组

tt <- read.table(text="
WorkerID  PaymentDate
 1       2015-06-18
 1       2015-07-18
 1       2015-08-18
 2       2015-09-18
 3       2015-08-18
 3       2015-09-18
 4       2015-10-18
 4       2015-11-18
 4       2015-12-16", header=TRUE)

tt$PaymentDate <- as.Date(tt$PaymentDate)

aggregate(PaymentDate ~ WorkerID, data=tt, FUN=function(x) mean(diff(x)))
#   WorkerID PaymentDate
# 1        1       30.5 
# 2        2        NaN 
# 3        3       31.0 
# 4        4       29.5 

tt这是
aggregate()
的完美工作。它按
WorkerID
PaymentDate
进行分组,并将函数
mean(diff(.)
应用于每个组

tt <- read.table(text="
WorkerID  PaymentDate
 1       2015-06-18
 1       2015-07-18
 1       2015-08-18
 2       2015-09-18
 3       2015-08-18
 3       2015-09-18
 4       2015-10-18
 4       2015-11-18
 4       2015-12-16", header=TRUE)

tt$PaymentDate <- as.Date(tt$PaymentDate)

aggregate(PaymentDate ~ WorkerID, data=tt, FUN=function(x) mean(diff(x)))
#   WorkerID PaymentDate
# 1        1       30.5 
# 2        2        NaN 
# 3        3       31.0 
# 4        4       29.5 

tt作为AkselA答案的替代方案,如果您喜欢使用
data.table
包,而不是基本R

这与使用聚合类似,但有时可能会提高速度。在下面的示例中,我通过将差值设置为0来处理单次,以说明如何实现这一点

library(lubridate)
library(data.table)
df <- fread("WorkerID  PaymentDate
 1       2015-07-18
 1       2015-08-18
 3       2015-09-18
 4       2015-10-18
 4       2015-11-18")
df[,PaymentDate := as.Date(PaymentDate)]
df[,{
    if(length(PaymentDate) > 1){
        mean(diff(as.numeric(PaymentDate)))
    }else
        0
}, by = WorkerID]
库(lubridate)
库(数据表)
df 1){
平均值(差异(如数字(付款日期)))
}否则
0
},by=WorkerID]

作为AkselA答案的另一种选择,如果您喜欢使用
data.table
包,而不是基本R

这与使用聚合类似,但有时可能会提高速度。在下面的示例中,我通过将差值设置为0来处理单次,以说明如何实现这一点

library(lubridate)
library(data.table)
df <- fread("WorkerID  PaymentDate
 1       2015-07-18
 1       2015-08-18
 3       2015-09-18
 4       2015-10-18
 4       2015-11-18")
df[,PaymentDate := as.Date(PaymentDate)]
df[,{
    if(length(PaymentDate) > 1){
        mean(diff(as.numeric(PaymentDate)))
    }else
        0
}, by = WorkerID]
库(lubridate)
库(数据表)
df 1){
平均值(差异(如数字(付款日期)))
}否则
0
},by=WorkerID]