在R.工作我有一个数据框出租车,我按车辆ID排序,然后按时间戳排序(最早到最晚),看起来如下:
Taxi = arrange(Taxi, Taxi$vehicle_id, Taxi$timestamp)
Excel中数据框示例的图像
您会注意到"距离"列涵盖每辆出租车的每次行程之间的距离。我想利用一个公式来计算每个出租车的距离。同样,我会在时间戳上重复此过程,从最早的日期减去最新日期,以计算每辆车在道路上的时间。我希望使用和距离和时差来计算每辆出租车的速度。因此,最终产品将是一个如下所示的矩阵(等待转换为米和秒):
最终产品图片Excel中的示例
我相信R中的for循环在这里很有用,识别每个车辆ID,运行相关的距离值然后将它们相加,但我不确定从哪里开始。我从一个独特的出租车车辆ID数据集开始,以帮助R识别它们。以下是我到目前为止总结距离的内容;我不确定如何告诉R对每个车辆ID范围求和:
Taxi.uniques = unique(Taxi$vehicle_id)
for (i in Taxi) {
look.at = Taxi$vehicle_id == i
sum(all distances for a vehicle ID)
}
以下是我通过它最早的时间戳减去每辆车最新时间戳的方法:
Taxi.uniques = unique(Taxi$vehicle_id)
for (i in Taxi) {
look.at = Taxi$vehicle_id == i
max(Taxi$timestamp[look.at]) - min(Taxi$timestamp[look.at])
}
不确定如果我走在正确的轨道上并会感激任何帮助!
答案 0 :(得分:3)
如果您不反对使用data.table,您可以一步完成。
require(data.table)
taxi<-data.table(vehicleID=c('Taxi1','Taxi2','Taxi3','Taxi1','Taxi2','Taxi3'),
timestamp=Sys.time()+sample(60:600,6),
distance=sample(1:50,6))
taxi[vehicleID %in% c('Taxi1','Taxi3'),list(TimeonRoad=max(timestamp)-min(timestamp),
Distance=sum(distance)),
by='vehicleID']
data.table
结构为DT[i, j, by]
。 i用于按条件进行子集化,j用于对变量运行不同的操作或选择列,用于分组。将子集添加到i将为您提供所需的信息。
答案 1 :(得分:0)
这是使用dplyr
的解决方案(更具可读性,恕我直言)
library(dplyr)
taxi %>%
group_by(vehicleID) %>%
summarize(
time = max(timestamp) - min(timestamp),
distance = sum(distance)
)