R 如果列中出现负值,如何复制该列?

R 如果列中出现负值,如何复制该列?,r,R,我有以下矩阵(示例): mat如果数字是严格的降序序列,如您的示例所示,您可以取每列的值,模为x[1]+1,其中x[1]是列中的第一个值。这样做的好处是,如果负数多于正数,它将继续发挥作用 apply(mat, 2, function(x) x %% (x[1] + 1)) #> [,1] [,2] [,3] #> [1,] 8 9 6 #> [2,] 7 8 5 #> [3,] 6 7 4 #>

我有以下矩阵(示例):


mat如果数字是严格的降序序列,如您的示例所示,您可以取每列的值,模为
x[1]+1
,其中
x[1]
是列中的第一个值。这样做的好处是,如果负数多于正数,它将继续发挥作用

apply(mat, 2, function(x) x %% (x[1] + 1))
#>       [,1] [,2] [,3]
#>  [1,]    8    9    6
#>  [2,]    7    8    5
#>  [3,]    6    7    4
#>  [4,]    5    6    3
#>  [5,]    4    5    2
#>  [6,]    3    4    1
#>  [7,]    2    3    0
#>  [8,]    1    2    6
#>  [9,]    0    1    5
#> [10,]    8    0    4

请尝试以下操作:

apply(mat, 2, function(x){
  inx <- which(x < 0)
  x[inx] <- x[seq_along(inx)]
  x
})
#      [,1] [,2] [,3]
# [1,]    8    9    6
# [2,]    7    8    5
# [3,]    6    7    4
# [4,]    5    6    3
# [5,]    4    5    2
# [6,]    3    4    1
# [7,]    2    3    0
# [8,]    1    2    6
# [9,]    0    1    5
#[10,]    8    0    4
应用(垫、2、功能(x){
因克斯
apply(mat, 2, function(x) x %% (x[1] + 1))
#>       [,1] [,2] [,3]
#>  [1,]    8    9    6
#>  [2,]    7    8    5
#>  [3,]    6    7    4
#>  [4,]    5    6    3
#>  [5,]    4    5    2
#>  [6,]    3    4    1
#>  [7,]    2    3    0
#>  [8,]    1    2    6
#>  [9,]    0    1    5
#> [10,]    8    0    4

apply(mat, 2, function(x){
  inx <- which(x < 0)
  x[inx] <- x[seq_along(inx)]
  x
})
#      [,1] [,2] [,3]
# [1,]    8    9    6
# [2,]    7    8    5
# [3,]    6    7    4
# [4,]    5    6    3
# [5,]    4    5    2
# [6,]    3    4    1
# [7,]    2    3    0
# [8,]    1    2    6
# [9,]    0    1    5
#[10,]    8    0    4