簡體   English   中英

如何在與R中另一列中的重復項相關聯的列中對值進行求和?

[英]How to sum values in a column associated with duplicates in another column in R?

在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]) 
}

不確定如果我走在正確的軌道上並且會感激任何幫助!

如果您不反對使用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將為您提供所需的信息。

這是使用dplyr的解決方案(更具可讀性,恕我直言)

library(dplyr)

taxi %>%
  group_by(vehicleID) %>%
  summarize(
    time = max(timestamp) - min(timestamp),
    distance = sum(distance)
  )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM