如何计算数据框中每个时间段中最后几行的平均值?

时间:2013-04-13 03:38:22

标签: r plyr

我收集了一些科目的数据,每隔15秒,每隔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 个答案:

答案 0 :(得分:2)

如果您将其转换为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,您可能想要最后8个: 00)。

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

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