2017-06-21 79 views
0

我已經在幾天內從5個GPS設備('節點')獲得了包含約5600行座標的GPS數據集,並且我想將GPS點的數量減少爲一個每小時點數。由於每小時的點數波動,所以不可能有簡單的for循環。 表中的一個簡化的結構將是這樣的:R:數據幀中的每小時一個值

ID node easting northing year month day hour minute time 

列「時間」是"POSIXlt" "POSIXt"類。 嘗試我的第一個方法,多重嵌套for循環,我瞭解了Second circle of Inferno

是否有人有任何想法,如何降低(每小時)多行(每小時)一個,每個設備在R.

+1

這是不相關的;-)。 – sequoia

回答

2

假設年,月,日和時間列包含與時間列有關的信息,解決方案可能如下:

# Generate data 

md <- data.frame(
    node = rep(1:5, each = 2) 
    , easting = sample(1:10, size = 20, replace = TRUE) 
    , northing = sample(1:10, size = 20, replace = TRUE) 
    , year = 2017 
    , month = "June " 
    , day = 6 
    , hour = rep(1:2, each = 2, times = 5) 
    , minute = NA 
    , time = NA 
) 

# Solution 

library(dplyr) 

md %>% 
    group_by(node, year, month, day, hour) %>% 
    summarize(
    easting = mean(easting), 
    northing = mean(northing) 
) 
+0

我認爲這種方法總體上是好的,除了平均東方和北方可能會給你非常誤導性的數據。如果有人走過曲線,平均點將遠遠落在人們實際走過的地方。 –

1

您可以創建一個新列「Unix_hour」分隔:在UNIX時間戳除以3600.

因此,每個小時您都將擁有一個唯一的ID。

要做到這一點,你應該用戶as.numeric轉換一個POSIXct日期爲Unix時間戳(秒):

as.numeric(POSIXct_variable)/3600 

它將返回時間戳。

然後,你只是通過這個新列「Unix_hour」組:

aggregate(. ~ Unix_hour, df, mean) 

(更改聚合函數「的意思是」如果你聚集在另一種方式的其他變量)

相關問題