Я не знаю точно, как мне сформулировать эту проблему, и я не могу придумать ни одного примера, как ее решить.Я придумала решение, но мне интересно, есть ли более простой или более эффективный способ борьбы с ним.
Я работаю с матрицей расстояний между людьми и событиями и хочу преобразоватьматрица, основанная на характеристиках событий и отдельных лиц.В этом случае я хочу знать, подвергался ли человек какому-либо событию в пределах определенного расстояния на основе других критериев.
Допустим, у нас есть два вектора, один из 4 человек и другой из 3 событий.Мы получаем матрицу расстояний в км между людьми и событиями:
> dist_mat = matrix(runif(12, 1, 100), ncol = 3)
> dist_mat
[,1] [,2] [,3]
[1,] 21.318423 89.79522 75.29824
[2,] 36.812542 18.28413 92.90719
[3,] 45.012960 89.11778 38.55608
[4,] 8.470336 46.17020 26.67135
Кроме того, я знаю, когда люди родились и когда произошли события, которая хранится в двух векторах:
> event_year = c(2003, 2005, 2009)
> indiv_born = c(2004, 2004, 2008, 2008)
Моя цель состоит в том, чтобы узнать, подверглась ли какая-либо личность воздействию события, произошедшего после ее рождения, и в пределах, скажем, 30 км.Мое решение на данный момент состоит в том, чтобы разложить векторы года в матрицы и обработать их оттуда, а затем использовать rowSums
, чтобы получить показатель того, подвергался ли человек такому событию:
> event_year_m = matrix(rep(event_year, each = nrow(x1)), ncol = ncol(x1))
> indiv_born_m = matrix(rep(indiv_year, each = ncol(x1)), byrow = TRUE, ncol = ncol(x1))
> event_year_m
[,1] [,2] [,3]
[1,] 2003 2005 2009
[2,] 2003 2005 2009
[3,] 2003 2005 2009
[4,] 2003 2005 2009
> indiv_year_m
[,1] [,2] [,3]
[1,] 2004 2004 2004
[2,] 2004 2004 2004
[3,] 2008 2008 2008
[4,] 2008 2008 2008
> dist_mat[event_year_m < indiv_year_m] = NA
> dist_mat[dist_mat < 30] = 1
> dist_mat[dist_mat >= 30] = 0
> dist_mat
[,1] [,2] [,3]
[1,] NA 0 0
[2,] NA 1 0
[3,] NA NA 0
[4,] NA NA 1
> indiv_exposure = rowSums(dist_mat, na.rm = TRUE)
[1] 0 1 0 1
это имеет смысл?Нет ли более простого способа сделать это?Было бы проще иметь только один вектор, но это невозможно выяснить в случае пороговых значений для строк и столбцов.