【问题标题】:R - Mean of every nth Value from column in data frame, numeric & POSIXR - 数据框中每列第 n 个值的平均值,数字和 POSIX
【发布时间】:2018-01-03 14:08:19
【问题描述】:

我从不同的传感器获取一些数据,包括每分钟的时间戳。 为了可视化我的数据,我想用平均值总结每 10 个值。

我的数据如下所示:

 Temp Humidity Pressure           Time
1          21.9             66.1   1007.76 2017-07-24 18:13:02
2          21.9             66.2   1007.76 2017-07-24 18:14:05
3          21.9             66.2   1007.76 2017-07-24 18:15:02
4          22.0             65.8   1007.76 2017-07-24 18:16:02
5          22.0             66.1   1007.76 2017-07-24 18:17:02
6          22.0             66.2   1007.76 2017-07-24 18:18:02
7          22.0             66.1   1007.76 2017-07-24 18:19:02
8          22.0             66.3   1007.76 2017-07-24 18:20:02
9          22.0             66.3   1007.76 2017-07-24 18:21:02
10         22.0             66.3   1007.76 2017-07-24 18:22:02
11         22.0             66.0   1007.76 2017-07-24 18:23:02


# [...] about 1700 rows

我有一个工作代码,但仅适用于数字列:

aggregate(df,list(rep(1:(nrow(df)%/%n+1),each=n,len=nrow(df))),mean)[-1];

这给了我想要的前三列,它们是数字向量。但就目前而言,我得到的只是 POSIXlt 的每一行都是“2017-07-24 18:17:32”。 有谁知道这个的解决方案?如果我必须单独使用时间的手段,那将不是问题。

【问题讨论】:

  • 使用dput(head(df,10)) 来展示您的数据,而不是您拥有的表格。
  • ...或dput(droplevels(head(df, 11))),如果您有因子列。
  • 如果数据类是POSIXt,那么它应该可以工作。如果不了解您的数据的实际结构,我们将无法为您提供帮助。
  • @psalterium 不确定究竟什么是有效的,但主要是因为如果你有字符,你就无法理解它们的意思。它们应该是 POSIXt 和 POSIXct 的类。
  • @Masoud 我只是把时间列放在第一位,所以数据现在的顺序是“时间、温度、湿度、压力”。我这样做是因为我误读了您的答案。令我惊讶的是,它现在可以完美运行。正如我在问题中所写的,“时间”一直都是 POSIXlt 的。我只是想知道它为什么会这样。

标签: r dataframe mean posixlt


【解决方案1】:

您可以创建一个列组和group_by 这一列和summarize 所有列,以获得每 10 行的平均值:

n <- nrow(df)
df$group <- rep(seq_len(ceiling(n / 10)), each = 10)[seq_len(n)]

library(dplyr)
df %>%
  group_by(group) %>%
  summarise_all(mean) %>%
  select(-group)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 2013-11-28
    • 2021-12-12
    • 2017-12-04
    • 1970-01-01
    • 2022-07-05
    • 1970-01-01
    相关资源
    最近更新 更多