R 在对数据表进行排序后,是否可以选择一个值,取消排序,然后将该值及其下面的5个值保存到数据框中?

R 在对数据表进行排序后,是否可以选择一个值,取消排序,然后将该值及其下面的5个值保存到数据框中?,r,R,在我的最后一个问题中,我问如何找到滚动平均值,谢谢你的帮助 然而,现在我有了滚动平均值的最低代谢值,我的表格就不再有序了。 我想标记该行的O2值,将其重新排序到其原始位置,然后用下面的4个值平均该02值。这可能吗 我只是不知道如何设置标志,让R知道我想在取消表排序后继续使用这个值 或者,与其取消排序并标记我指定的O2值,不如简单地标记该O2值的时间戳,在原始表中查找该时间,然后从该行中选择O2以对其下的5个值进行平均 我希望得到的值是13:36到14:01之间的V02平均值,即:0.738622

在我的最后一个问题中,我问如何找到滚动平均值,谢谢你的帮助

然而,现在我有了滚动平均值的最低代谢值,我的表格就不再有序了。 我想标记该行的O2值,将其重新排序到其原始位置,然后用下面的4个值平均该02值。这可能吗

我只是不知道如何设置标志,让R知道我想在取消表排序后继续使用这个值

或者,与其取消排序并标记我指定的O2值,不如简单地标记该O2值的时间戳,在原始表中查找该时间,然后从该行中选择O2以对其下的5个值进行平均

我希望得到的值是13:36到14:01之间的V02平均值,即:0.738622117

Date       Time     kCal       VO2      VCO2      Lowest Average    
2020/08/11 13:36:00 0.1796796 0.6212131 0.5481290 1.290649
2020/08/11 13:41:00 0.1796833 0.6212261 0.5481405 1.412320
2020/08/11 18:06:00 0.2475342 0.8529993 0.7080062 1.540823
2020/08/11 13:46:00 0.1796903 0.6212505 0.5481620 1.551518
2020/08/11 18:01:00 0.3073857 1.0778390 0.9221587 1.580908
etc.
编辑: 从第二个解决方案:

> August11RMR6[,..I:=.I]

> setorder(August11RMR6, VO2_M_1, na.last=T)

> August11RMR6[..I%in%(..I[1]+(0:4)),]
输出:

              DateTime kcal_hr_M_1   VO2_M_1  VCO2_M_1 Sum_6period ..I
1: 2020/08/11 13:36:00   0.1796796 0.6212131 0.5481290    1.290649   1
2: 2020/08/11 13:41:00   0.1796833 0.6212261 0.5481405    1.412320   2
3: 2020/08/11 13:46:00   0.1796903 0.6212505 0.5481620    1.551518   4
4: 2020/08/11 18:06:00   0.2475342 0.8529993 0.7080062    1.540823   3
5: 2020/08/11 18:01:00   0.3073857 1.0778390 0.9221587    1.580908   5
从第一个解决方案:

> August11RMR6[,..I:=.I]

> setorder(August11RMR6, VO2_M_1, na.last=T)

> August11RMR6[..I%in%(..I[1]+(0:4)),]
>8月11日RMR6[,…I:=.I] >row.num row.num [1] 1 >8月11日RMR6[行数+0:4] 将实际行号保存到新列 dfs[,…I:=.I] 获取最小值的行号 row.num DateTime kcal_hr_M_1 VO2_M_1 VCO2_M_1 roll_和..I > 1: 2020/08/11 13:36:00 0.1796796 0.6212131 0.5481290 0.9647027 1 > 2: 2020/08/11 13:41:00 0.1796833 0.6212261 0.5481405 1.1109694 2 > 3: 2020/08/11 13:46:00 0.1796903 0.6212505 0.5481620 1.2326371 3 > 4: 2020/08/11 13:51:00 0.1797111 0.6213223 0.5482253 1.3718277 4 > 5: 2020/08/11 13:56:00 0.2459384 0.8402357 0.7533433 1.5177674 5 编辑 将实际行号保存到新列 dfs[,…I:=.I] 设置data.table的顺序 setorderdfs,VO2_M_1,na.last=T 获取最小值后面的4个值 dfs[…I%单位为%…I[1]+0:4,] >DateTime kcal_hr_M_1 VO2_M_1 VCO2_M_1 roll_sum..I > 1: 2020/08/11 13:36:00 0.1796796 0.6212131 0.5481290 0.9647027 1 > 2: 2020/08/11 13:41:00 0.1796833 0.6212261 0.5481405 1.1109694 2 > 3: 2020/08/11 13:46:00 0.1796903 0.6212505 0.5481620 1.2326371 3 > 4: 2020/08/11 13:51:00 0.1797111 0.6213223 0.5482253 1.3718277 4 > 5: 2020/08/11 13:56:00 0.2459384 0.8402357 0.7533433 1.5177674 5
您应该能够创建基于O2的排名列,然后在此基础上进行筛选。请使用dput添加数据,并显示相同的预期输出。阅读并了解如何给出排名。@hannes101当你建议排名栏时,我知道你是从哪里来的,但我的问题是列表中的第三点不是我想要的。我想要13:36:00和之后的5个值,在我排序的原始文档中。将其从最小值排序到最大值会给我前3-4分,但第5分会更大,并且会在列表中放得更远。我要找的是R标记最上面的VO2值,在原始列表中搜索它,然后选择它和它下面的5个值…不确定这是否可行,但感谢您的帮助!我很感激。@RonakShah我添加了我期望的答案和数据,希望格式可以接受……如果没有,请随时告诉我,我可以尝试修复。谢谢你的帮助,我不知道dput函数存在,我会确保将来使用它。你能在数据上使用dput吗?我没有得到相同的结果,你为dfs设置了什么?我可能对as.numericAugust11RMR6[orderVO2_M_1[1],…I]有问题,因为它没有排序这里是我没有排序的输出:structurelistDateTime=c2020/08/11 13:36:00,2020/08/11 13:41:00,2020/08/11 18:06:00,2020/08/11 13:46:00,2020/08/11 18:01:00,kcal_hr_M_1=c0.1796796,0.1796833,0.2475342,0.17969037,VO2_M_1=c0.6212131,0.6212261,0.8529993,0.6212505,1.077839,VCO2_M_1=c0.548129,0.5481405,0.7080062,0.548162,0.9221587,和期=c1.290649,1.4123204,1.540823,1.551518,1.5809082,…I=1:5,row.names=cNA,--5L,class=cdata.table,data.frame,data.frame,…internal.self=1.ref,…这里输入的是什么,没有输入的[…]>row.num row.num>August11RMR6[row.num+0:4]是否希望对输出进行排序??我的代码实际上并没有保留已排序的df。但这很容易做到solved@qsxsqsxs检查编辑。我正在使用你提供的数据。此外,这种方法还可以节省内存,因为您只需要一个data.table来保存所有数据。