У меня есть дата-кадр, который состоит из времени, когда пациенты умерли.
Это выглядит примерно так
Time Alive Died Lost
0 375 0 2
0.0668 373 1 9
0.3265 363 2 12
0.6439 349 0 6
0.7978 343 2 1
0.8363 340 2 2
0.8844 336 2 0
0.894 334 3 2
0.9325 329 4 0
0.9517 325 4 1
Я хочу создать функцию, в которой она будет проверять, меньше ли время между двумя строками, чем пороговое значение.
Если, скажем, t2 - t1 <порог, то будет записано, сколько людей погибло в этом интервале и сколько было потеряно в этом интервале, и записано это. Затем он выдаст кадр данных с интервалами, превышающими пороговое значение, с добавлением соответствующих чисел. </p>
Скажи, если мой порог был 0,29
Вторая строка будет удалена, если будет зарегистрировано, что 1 человек умер, а 9 потерялись, и добавит это в первый столбец «Умеренные / потерянные»
выглядит как
Time Alive Died Lost
0 375 1 11
0.3265 363 2 12
0.6439 349 0 6
...
Я что-то написал, но он не работает, если ему нужно добавить несколько строк.
Какой лучший способ сделать это эффективно?
EDIT
aggregateTimes <- function(data, threshold = 0.04){
indices <- (diff(data[,1]) < threshold)
indices <- c(FALSE, indices)
for(i in 1:(nrow(data)-1)){
row1 <- data[i, ]
row2 <- data[i+1, ]
if((row2[,1] - row1[,1]) < threshold){
newrow <- row1 + c(0,0, row2[, 3:4])
data[i,] <- newrow
data <- data[-(i+1),]
}
}
return(data)
}
Но индексация не удалась, потому что данные имеют уменьшенное измерение?
Ответить @ Moody_Mudskipper
Time Alive Died Lost
0 375 1 11
0.3265 363 2 12
0.6439 349 13 11
0.9517 325 4 1