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