【问题标题】:R: One value per hour in data frameR:数据框中每小时一个值
【发布时间】:2017-06-21 11:43:15
【问题描述】:

我有一个 GPS 数据集,其中包含几天内来自 5 个 GPS 设备(“节点”)的大约 5600 行坐标,我想将 GPS 点的数量减少到每小时一个点。因为每小时的点数是波动的,所以简单的 for 循环是不可能的。 表格的简化结构如下:

ID  node  easting  northing  year  month  day  hour  minute  time

“时间”列是类"POSIXlt" "POSIXt"。 尝试了我的第一种方法,即多重嵌套 for 循环,我了解了 Second circle of Inferno

有人知道如何将多行(每小时)减少到一行(每小时),由 R 中的每个设备分隔。

【问题讨论】:

  • 这无关紧要;-)。

标签: r dataframe gps reducing spatial-data


【解决方案1】:

假设年、月、日、时间列包含与时间列相关的信息,则解决办法如下:

# 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)
  )

【讨论】:

  • 我认为这种方法通常很好,除了平均东移和北移可能会给您带来非常误导的数据。如果某人走弯道,则平均点将远在该人实际行走的地方。
  • 你是对的,在这种情况下,可以做的是将mean ()函数替换为使用更合适计算的任何其他函数
【解决方案2】:

您可以创建一个新列“Unix_hour”:UNIX 时间戳除以 3600。

因此,您每小时都会有一个唯一的 ID。

为此,您应该使用 as.numeric 将 POSIXct 日期转换为 Unix 时间戳(以秒为单位):

as.numeric(POSIXct_variable) / 3600

它将返回时间戳。

然后,您将按这个新列“Unix_hour”进行分组:

aggregate(. ~ Unix_hour, df, mean)

(如果您以其他方式聚合其他变量,请更改聚合函数“平均值”)

【讨论】:

    【解决方案3】:

    您可以将日期时间的多列转换为一列,例如:

    DateTimeUTCmin5 <- ISOdate(year = tmp$Year,
    month = tmp$Month,
    day = tmp$Day,
    hour = tmp$Hour,
    min = tmp$Min,
    sec = tmp$Sec,
    tz = "America/New_York")
    

    使用来自lubridatefloor_date 添加一个小时楼层

    df$HourFloor = floor_date(df$DateTimeUTCmin5, unit = "hour")
    

    然后决定你想如何从那个小时,平均,第一,最大提取数据?

    Hourstats <- df %>% group_by(HourFloor) %>%
    summarise(meanEast = mean(easting, na.rm = TRUE),
              firstNorth = first(northing, na.rm = TRUE))) %>%
    ungroup()
    

    【讨论】:

      猜你喜欢
      • 2013-07-03
      • 2022-11-28
      • 2016-04-13
      • 2020-12-23
      • 2015-05-30
      • 2021-08-30
      • 2020-06-12
      • 2022-01-11
      相关资源
      最近更新 更多