gpt4 book ai didi

r - 根据零之间的数据添加新列

转载 作者:行者123 更新时间:2023-12-01 08:23:34 25 4
gpt4 key购买 nike

我每秒收集一次功率数据 (Power) (Sample)。因此,我的 data.frame 的结构如下:

Test <- data.frame(Sample = c(1:20), 
Power = c(0,0,0,0,0,50,67,100,92,0,0,0,36,89,36,0,0,0,89,90))

功率输入的数量取决于一个人在自行车上的努力和偶尔的休息。因此,权力不会以有序的方式出现。由于没有标记来指示工作何时开始和停止,我想包括这个细节。当功率 > 0 并且可以基于数据组一起评估每个努力的开始/停止时,可以表征努力。

我现在希望包含一个新列(标记),用于查找分组在一起并用零分隔的功率数据。例如,我的预期输出是:

Test$Marker <- c("Rest","Rest","Rest","Rest","Rest","Effort 1","Effort 1","Effort 1","Effort 1",
"Rest","Rest","Rest","Effort 2","Effort 2","Effort 2","Rest","Rest","Rest",
"Effort 3","Effort 3")

不幸的是,我的原始数据长度 > 3000 行,因此手动执行此操作会很乏味!我该如何在 R 中执行此操作?

最佳答案

带有基础 R 的选项:

indx1 = with(rle(Test$Power>0),rep(values,lengths))
indx2 = with(rle(Test$Power>0),rep(cumsum(values),lengths))
Test$Effort[indx1] = paste0("Effort",indx2[indx1])
Test$Effort[!indx1]="Rest"

输出:

   Sample Power  Effort
1 1 0 Rest
2 2 0 Rest
3 3 0 Rest
4 4 0 Rest
5 5 0 Rest
6 6 50 Effort1
7 7 67 Effort1
8 8 100 Effort1
9 9 92 Effort1
10 10 0 Rest
11 11 0 Rest
12 12 0 Rest
13 13 36 Effort2
14 14 89 Effort2
15 15 36 Effort2
16 16 0 Rest
17 17 0 Rest
18 18 0 Rest
19 19 89 Effort3
20 20 90 Effort3

3,000 行大约需要 0.0038 秒 ;) 希望这会有所帮助!

关于r - 根据零之间的数据添加新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45408321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com