【问题标题】:How to compute the mean for the last few rows in each time period in a data frame?如何计算数据帧中每个时间段最后几行的平均值?
【发布时间】:2013-04-13 03:38:22
【问题描述】:

我收集了几个主题的数据,在一小时内每 15 秒一次,按时间段划分。这是数据框的样子,时间是“Temps”,主题是“Sujet”,周期由“Palier”确定。

    data.frame':    2853 obs. of  22 variables:
 $ Temps         : Factor w/ 217 levels "00:15","00:30",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ Sujet         : int  1 1 1 1 1 1 1 1 1 1 ...
 $ Test          : Factor w/ 3 levels "VO2max","Tlim",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ Palier        : int  1 1 1 1 1 1 1 1 1 1 ...
 $ RPE           : int  8 8 8 8 8 8 8 8 8 8 ...
 $ Rmec          : num  39.1 27.5 23.3 21.5 20.3 21.7 20.5 20.7 20.2 20.1 ...

这里是data.frame的一瞥:

  Temps Sujet   Test Palier RPE Rmec Pmec Pchim Fr   Vt    VE  FeO2 FeCO2  VO2 VCO2  RER  HR VO2rel     VE.VO2    VE.VCO2
1 00:15     1 VO2max      1   8 39.1  185 473.6 19 1854 34.60 16.24  4.48 1353 1268 0.94 121   17.6 0.02557280 0.02728707
2 00:30     1 VO2max      1   8 27.5  185 672.4 17 2602 44.30 15.77  4.78 1921 1731 0.90 124   25.0 0.02306091 0.02559214
3 00:45     1 VO2max      1   8 23.3  185 794.5 18 2793 50.83 15.63  4.85 2270 2015 0.89 131   29.6 0.02239207 0.02522581
4 01:00     1 VO2max      1   8 21.5  185 860.3 20 2756 55.76 15.68  4.88 2458 2224 0.90 137   32.0 0.02268511 0.02507194
5 01:15     1 VO2max      1   8 20.3  185 909.3 23 2709 61.26 15.84  4.88 2598 2446 0.94 139   33.8 0.02357968 0.02504497
6 01:30     1 VO2max      1   8 21.7  185 853.7 21 2899 59.85 16.00  4.89 2439 2395 0.98 140   31.8 0.02453875 0.02498956

每个“Palier”持续约 5 分钟,共有 5 到 10 个“Palier”。对于每个主题和“Palier”,我需要计算所有变量最后 2 分钟的平均值。 dcast() 或 ddply() 还没弄明白,但我是新手!

任何帮助将不胜感激!

【问题讨论】:

  • 发布您的数据或一些类似数据集的头部和足够的行,我们可以提供帮助,否则您正在让我们创建数据。
  • +1 到@TylerRinker。另外,每个科目的最后 2 分钟是否相同?如果是这样,您可以将整个数据集子集化为只有这些句点,然后您只需要 dcast()。否则,使用 ddply 仍然应该相当简单,所以为什么不粘贴您尝试过的内容。
  • 添加了数据集的头部以提供帮助。使用 ddply 和 dcast 可能很简单,但我是新手,还没有弄清楚。

标签: r plyr


【解决方案1】:

如果你把它变成data.table(你必须安装它),你可以这样做

library(data.table)
dt = as.data.table(d)  # assuming your existing data frame was called d
last.two.min = dt[, mean(tail(Rmec, 9)), by=Sujet]

这假设您的原始数据框名为d,并且您需要最后 9 个项目(因为它是每 15 秒一次 - 如果您想要从 58:15 到 60:00,您可能需要最后 8 个) .

我假设 Rmec 是您想要获取平均值的变量。如果有多个您想获得平均值,您可以执行以下操作:

last.two.min = dt[, list(mean.Rmec=mean(tail(Rmec, 9)),
                        mean.RPE=mean(tail(RPE, 9))), by=Sujet]

【讨论】:

  • 试过这个,但不能让它工作。收到此消息:Error in ``[.data.frame``(dt, , mean(tail(Rmec, 9)), by = Sujet) : unused argument (by = Sujet)
  • 抱歉 - 将 d[, ...] 更改为 dt[, ...
猜你喜欢
  • 2017-10-13
  • 2021-09-22
  • 1970-01-01
  • 1970-01-01
  • 2021-06-23
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
  • 2022-01-06
相关资源
最近更新 更多