2016-07-07 53 views
0

我有一个数据集的开始/停止时间的某个球员和他们的持续时间。Cumultative时间的reccurent事件

Start Stop Duration 
    1 50  49 
153 183  30 
274 295  21 
312 336  24 
428 463  35 
488 543  55 

我现在作为时间点的序列:

Time a 
1 0.0 NA 
2 232.0 NA 
3 270.0 NA 
4 300.0 NA 
5 600.5 NA 

鉴于任何时间点,我想随着时间的总ammount的玩家一直玩到那填补时间点。因此,例如在时间= 14,我想要一个= 14

这样做的最有效的方法是什么?

样品dput:

test1 <- structure(list(Start = c(1, 153, 274, 312, 428, 488, 658, 738, 
820, 957, 1052, 1194, 1327, 1542, 1857, 1940, 2091, 2328, 2583, 
2762, 2973, 3030, 3123, 3363, 3428, 3558), Stop = c(50, 183, 
295, 336, 463, 543, 705, 792, 852, 1015, 1101, 1213, 1384, 1596, 
1884, 2007, 2158, 2437, 2678, 2804, 3000, 3073, 3169, 3410, 3473, 
3561), Duration = c(49, 30, 21, 24, 35, 55, 47, 54, 32, 58, 49, 
19, 57, 54, 27, 67, 67, 109, 95, 42, 27, 43, 46, 47, 45, 3)), .Names = c("Start", 
"Stop", "Duration"), row.names = c("5112", "1534", "27417", "31215", 
"4286", "488", "65810", "738", "82013", "957", "1052", "11945", 
"1327", "15423", "1857", "1940", "209123", "23283", "25837", 
"276228", "297320", "3030", "31239", "3363", "3428", "3558"), class = "data.frame") 

test2 <- structure(list(Time = c(0, 14, 14, 27, 40, 45.5, 51, 58, 65, 
66, 73, 84, 95, 113, 113.5, 114, 114, 124, 125, 135, 143.5, 152, 
152, 157, 165, 165, 177, 189, 189, 211, 218.5, 226, 233, 234, 
234.5, 235, 235, 251, 261, 271, 273, 273, 295, 295, 311, 311, 
311, 311, 329, 332.5, 336, 336, 355, 374, 392, 410, 413, 424, 
429, 434, 445.5, 457, 460.5, 464, 475.5, 487, 487, 493, 498, 
505, 514, 520, 531, 537, 543, 543, 543, 558, 565, 572, 572, 572, 
588, 588, 601, 609, 609, 635, 641.5, 648, 660, 672, 672, 672, 
677, 705, 705, 705, 721, 737), a = c(NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), .Names = c("Time", 
"a"), row.names = c("1", "3120010", "2", "3", "4", "5", "6", 
"7", "8", "9", "10", "11", "12", "13", "14", "1310501", "15", 
"16", "17", "18", "19", "1810491", "20", "21", "22", "23", "24", 
"26", "25", "27", "28", "29", "30", "31", "32", "2918010", "33", 
"34", "35", "36", "3320010", "37", "3520010", "38", "42", "39", 
"40", "41", "43", "44", "4217010", "45", "46", "47", "48", "49", 
"50", "51", "52", "53", "54", "55", "56", "57", "58", "512601", 
"59", "60", "61", "62", "63", "64", "65", "66", "601901", "68", 
"67", "69", "70", "641901", "72", "71", "661481", "73", "74", 
"691601", "75", "76", "77", "78", "79", "741901", "81", "80", 
"82", "781601", "84", "83", "85", "87"), class = "data.frame") 

回答

1

鉴于你的数据:

test2$a <- sapply(test2$Time, function(tm) { 
    sum(ifelse(tm < test1$Start, 0, 
      ifelse(tm > test1$Stop, test1$Stop - test1$Start, 
        tm - test1$Start))) 
}) 

head(test2, n = 12) 
#   Time a 
# 1  0.0 0.0 
# 3120010 14.0 13.0 
# 2  14.0 13.0 
# 3  27.0 26.0 
# 4  40.0 39.0 
# 5  45.5 44.5 
# 6  51.0 49.0 
# 7  58.0 49.0 
# 8  65.0 49.0 
# 9  66.0 49.0 
# 10  73.0 49.0 
# 11  84.0 49.0 

你在你的文字说: “在时间= 14,我想一个= 14”,但您的数据不同意:如果在50岁时你有49个累计单位,为什么在14岁时你没有13?无论如何,可以通过将除0之外的所有内容都加1来容易地进行调整。