我如何在R中将矩阵的两列与其他两列进行比较,并同时生成一个新矩阵?

问题描述 投票:0回答:1

我有一个数据集:

time   delta
0.47   0
0.01   1
0.30   1
0.07   0
0.38   0
0.68   1
0.13   0
0.09   1
0.08   1
0.04   0
0.13   0
0.41   1
0.22   0
0.11   0
0.85   0
0.26   0

我正在使用R,我需要将此矩阵与其自身进行比较。我想用值生成一个新的矩阵16 * 16:

1 time_i > time_j  &  delta_i= delta_j != 0;

0 otherwise.

where i, j = 1,..., 16.

我试图使用sapply()函数,但是仅当我想就一个条件进行比较时,它才有用。

有人可以帮我吗?预先谢谢你。

r rstudio sapply
1个回答
0
投票

您可以使用outer将函数应用于两个向量中的每对元素,因此您可以对两个逻辑比较中的每一个执行一个outer,将它们与逻辑AND组合,然后转换为数字。在这里,我假设您的矩阵称为m

1*(outer(m[,1], m[,1], `>`) & outer(m[,2], m[,2], function(x,y) x==y & x != 0))
#>       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
#>  [1,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0
#>  [2,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0
#>  [3,]    0    1    0    0    0    0    0    1    1     0     0     0     0     0
#>  [4,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0
#>  [5,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0
#>  [6,]    0    1    1    0    0    0    0    1    1     0     0     1     0     0
#>  [7,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0
#>  [8,]    0    1    0    0    0    0    0    0    1     0     0     0     0     0
#>  [9,]    0    1    0    0    0    0    0    0    0     0     0     0     0     0
#> [10,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0
#> [11,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0
#> [12,]    0    1    1    0    0    0    0    1    1     0     0     0     0     0
#> [13,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0
#> [14,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0
#> [15,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0
#> [16,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0
#>       [,15] [,16]
#>  [1,]     0     0
#>  [2,]     0     0
#>  [3,]     0     0
#>  [4,]     0     0
#>  [5,]     0     0
#>  [6,]     0     0
#>  [7,]     0     0
#>  [8,]     0     0
#>  [9,]     0     0
#> [10,]     0     0
#> [11,]     0     0
#> [12,]     0     0
#> [13,]     0     0
#> [14,]     0     0
#> [15,]     0     0
#> [16,]     0     0

© www.soinside.com 2019 - 2024. All rights reserved.