r - 基于 R 中的两个阈值向量操作矩阵

标签 r matrix

我不知道应该如何解决这个问题,也想不出任何解决它的例子。我想出了一个解决方案,但我想知道是否有更简单或更有效的方法来处理它。

我正在处理个体和事件之间的距离矩阵,并且我想根据事件和个体的特征来转换矩阵。在这种情况下,我想知道一个人是否根据其他标准在一定距离内暴露于某个事件。

假设我们有两个向量,一个是 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

这有道理吗?难道没有更简单的方法来做到这一点吗?只有一个向量会更简单,但在特定于行和列的阈值的情况下无法计算出来。

最佳答案

我们可以使用 col/row 在一行中完成此操作(或分成两行以提高可见性)对于“event_year”和“indiv_born”的复制,将逻辑向量更改为 NA当'event_year'小于'indiv_born'时,乘以dist_mat这样NA仍然不适用,用 < 30 转换为逻辑矩阵并获取rowSums

rowSums((dist_mat * NA^(event_year[col(dist_mat)] < 
             indiv_born[row(dist_mat)])) < 30, na.rm = TRUE)

关于r - 基于 R 中的两个阈值向量操作矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55247585/

相关文章:

重命名一系列列名中的变量

r - 在正交投影中绘制世界地图给出 "non finite points"

c - 尝试为任意大小的矩阵编写矩阵乘法器

image-processing - 这个 YUV420P 到 RGB 着色器的转换从何而来?

python - 有没有一种简单的方法可以将 Pandas 系列转换为系列中值的比率交叉表?

r - 连接 R 和 Impala

r - 将参数作为 (1) 字符串向量和 (2) 变量名提供给 data.table

r - 在启动时检测 R session 是否在 RStudio 中运行

python - 在矩阵中查找最小值的索引

r - 在 R 中可视化来自事后 Tukey 的临界值/成对比较