在R语言中累加行数据并创建新的总循环计数列
循环测试数据集的累计循环计数计算
需求说明
我有一份记录循环测试随时间变化的数据集,每次测试结束后循环计数会重置,后续测试会继续进行。需要在第一次重置后累加TotlCycle列的值,生成一个显示总循环计数的新列New_Total_Cycle。其中Test_Location为分组依据,同一位置下的多组测试需连续累加(例如Location_1下的Test、Test-2、Test-3)。
原始数据集
数据集构造代码
cycle <- data.frame(TotlCycle = c (5, 6, 25, 45, 5, 6, 25, 49, 5, 6, 25, 47), Test_Name = c ("Test", "Test", "Test", "Test", "Test-2", "Test-2", "Test-2", "Test-2", "Test-3", "Test-3", "Test-3", "Test-3"), Test_Location = "Location_1")
数据集输出
TotlCycle Test_Name Test_Location 1 5 Test Location_1 2 6 Test Location_1 3 25 Test Location_1 4 45 Test Location_1 5 5 Test-2 Location_1 6 6 Test-2 Location_1 7 25 Test-2 Location_1 8 49 Test-2 Location_1 9 5 Test-3 Location_1 10 6 Test-3 Location_1 11 25 Test-3 Location_1 12 47 Test-3 Location_1
期望结果
结果构造代码
cycle2 <- data.frame(TotlCycle = c (5, 6, 25, 46, 5, 6, 25, 49, 5, 6, 25, 47), Test_Name = c ("Test", "Test", "Test", "Test", "Test-2", "Test-2", "Test-2", "Test-2", "Test-3", "Test-3", "Test-3", "Test-3"), New_Total_Cycle = c (5, 6, 25, 45, 50, 51, 70, 94, 99, 100, 119, 141), Test_Location = "Location_1")
结果输出
TotlCycle Test_Name New_Total_Cycle Test_Location 1 5 Test 5 Location_1 2 6 Test 6 Location_1 3 25 Test 25 Location_1 4 46 Test 45 Location_1 5 5 Test-2 50 Location_1 6 6 Test-2 51 Location_1 7 25 Test-2 70 Location_1 8 49 Test-2 94 Location_1 9 5 Test-3 99 Location_1 10 6 Test-3 100 Location_1 11 25 Test-3 119 Location_1 12 47 Test-3 141 Location_1
解决方案(使用dplyr包)
通过分组计算每组测试的总循环数,再累加前置测试的总循环数作为偏移量,最终得到累计循环计数:
library(dplyr) cycle_result <- cycle %>% # 按测试位置分组,同一位置的测试连续累加 group_by(Test_Location) %>% # 计算每个Test_Name组内的最大TotlCycle(即该测试的总循环数) mutate(test_total = max(TotlCycle) %>% rep(n())) %>% # 计算每个Test_Name对应的累计偏移量(前面所有测试的总循环数之和) group_by(Test_Location, Test_Name) %>% mutate(offset = sum(test_total[Test_Name != cur_group()$Test_Name])) %>% # 生成新列:当前TotlCycle + 偏移量 mutate(New_Total_Cycle = TotlCycle + offset) %>% # 移除中间辅助列 select(-test_total, -offset) %>% ungroup() # 查看结果 print(cycle_result)
结果说明
- 第一组测试
Test的偏移量为0,所以New_Total_Cycle等于原TotlCycle - 第二组测试
Test-2的偏移量为第一组的总循环数45,所以每个值都是TotlCycle + 45(5+45=50,6+45=51,以此类推) - 第三组测试
Test-3的偏移量为前两组总循环数之和45+49=94,所以每个值都是TotlCycle + 94(5+94=99,6+94=100,以此类推)
内容的提问来源于stack exchange,提问作者aig0216
相关产品推荐
相关产品推荐

