R 计算日期之间的平均时间
我很难计算csv付款日期之间的平均时间。我尝试了多种我在网上看到的方法(改为data.table,使用ddply),但没有成功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 这是我的数据集的一个例子——我想用最简单的方法计算两个付款日期之间的平均时间(以天数为单位)。我想按工号分组。 谢谢大家! 这
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]