【发布时间】:2022-11-15 20:51:14
【问题描述】:
我有一个方阵,我希望对一些外部行和列中的所有值做一些事情,例如将 abmat 中的行和列 g:j 中的所有内容乘以 10:
abmat <-matrix(
data = rpois(n = 10*10, lambda = 1),
nrow = 10,
dimnames = list(letters[1:10], letters[1:10])
)
abmat
#> a b c d e f g h i j
#> a 0 2 2 1 0 0 0 1 1 2
#> b 2 1 2 2 0 1 0 0 1 1
#> c 1 0 1 2 0 2 2 1 1 0
#> d 0 2 0 0 1 3 1 1 3 1
#> e 0 0 1 1 3 2 1 1 1 0
#> f 1 1 1 1 2 0 2 1 0 1
#> g 0 0 2 1 0 0 0 0 1 3
#> h 0 2 2 0 1 0 2 1 1 1
#> i 1 1 0 2 0 0 2 1 0 1
#> j 0 0 2 0 0 0 1 1 2 1
似乎我可以通过排除来排除,但实际上这排除了指定行/列中的所有内容,所以只给出底角,而不是我想要的向后 L 部分:
abmat[-1:-6, -1:-6]*10
#> g h i j
#> g 0 0 10 30
#> h 20 10 10 10
#> i 20 10 0 10
#> j 10 10 20 10
#no
我可以通过分解它并在两个不同形状的部分上操作来创建反向 L:
abmat2 <- abmat
abmat2[7:10,] <- abmat[7:10,]*10
abmat2[1:6, 7:10] <- abmat[1:6, 7:10]*10
abmat2
#> a b c d e f g h i j
#> a 0 2 2 1 0 0 0 10 10 20
#> b 2 1 2 2 0 1 0 0 10 10
#> c 1 0 1 2 0 2 20 10 10 0
#> d 0 2 0 0 1 3 10 10 30 10
#> e 0 0 1 1 3 2 10 10 10 0
#> f 1 1 1 1 2 0 20 10 0 10
#> g 0 0 20 10 0 0 0 0 10 30
#> h 0 20 20 0 10 0 20 10 10 10
#> i 10 10 0 20 0 0 20 10 0 10
#> j 0 0 20 0 0 0 10 10 20 10
#yes
是的,工作,但有点繁琐 - 有没有更直接的方法来做到这一点?
由reprex package (v2.0.1) 于 2022 年 11 月 11 日创建
【问题讨论】:
标签: r