R: как найти значение в первом столбце и сумму в третьем столбце - PullRequest
0 голосов
/ 06 марта 2019

У меня есть файл, подобный этому

    Age.Range            Average  Probability
1    0 to 04               400     0.00400
2   05 to 09               221     0.00221
3   10 to 14               216     0.00216
4   15 to 19               409     0.00409

Х [возраст человека; целое число от 0 до 80 лет]

Y [продолжительность наблюдения за человеком; целое число от 1 до 50 лет или «на всю жизнь»]

Мне нужно рассчитать вероятность того, что у человека в возрасте X (пример 3) разовьется рак в течение интервала, начинающегося сегодня, до Y (пример 7). В R мне нужно найти значение X и значение X + Y в первом столбце и суммировать все значения в третьем столбце между этими двумя диапазонами:

X= 3
x+y=10
probability= 0.004 + 0.00221 + 0.00216

1 Ответ

1 голос
/ 06 марта 2019

Следующая функция делает то, что вы хотите.Он получает начало возрастных диапазонов и затем использует findInterval, чтобы найти индексы в столбце вероятностей.Затем нужно добавить эти вероятности.

sumProbs <- function(DF, X, Y){
  DF[["Age.Range"]] <- as.character(DF[["Age.Range"]])
  Age.Start <- strsplit(DF[["Age.Range"]], " to ")
  Age.Start <- as.integer(sapply(Age.Start, '[[', 1))
  i <- findInterval(c(X, X + Y), Age.Start)
  p <- DF[["Probability"]][i[1]:i[2]]
  sum(p)
}

sumProbs(df1, 3, 7)
#[1] 0.00837

Данные в формате dput.

df1 <-
structure(list(Age.Range = c("0 to 04", "05 to 09", 
"10 to 14", "15 to 19"), Average = c(400L, 221L, 
216L, 409L), Probability = c(0.004, 0.00221, 0.00216, 
0.00409)), row.names = c("1", "2", "3", "4"), 
class = "data.frame")
...