使用dplyr管道替换对角线元素

6

我想在管道过程中替换矩阵的对角线元素,但不知道如何做到。我知道可以使用 diag() 函数来替换对角线元素,但我不知道如何在管道过程中使用 diag() 函数。以下是示例数据,我希望将以下步骤放在一起进行管道处理。先行致谢。

aa <- matrix(1:25, nrow =5) 
diag(aa) <- NA
2个回答

4

一种选择可能是:

aa %>%
 `diag<-`(., NA)

     [,1] [,2] [,3] [,4] [,5]
[1,]   NA    6   11   16   21
[2,]    2   NA   12   17   22
[3,]    3    8   NA   18   23
[4,]    4    9   14   NA   24
[5,]    5   10   15   20   NA

我曾尝试使用__aa %>% diag<-NA_,但没有成功。感谢您向我展示了正确的方法。 - rm167
我不确定这是否是正确的方法,这只是一种方法来完成它 :) - tmfmnk
请问你能解释一下赋值运算符在这里的工作原理吗?我有点困惑,普通括号()在这里如何使用,没有关联函数。它们也不是diag()函数的参数。 - rm167
1
看一下 View(diag<-)。你可以看到它是如何定义的。 - tmfmnk

4
我们可以使用带有逻辑条件的 replace
library(dplyr)
aa %>% 
     replace(., col(.) == row(.), NA)

-输出

#      [,1] [,2] [,3] [,4] [,5]
#[1,]   NA    6   11   16   21
#[2,]    2   NA   12   17   22
#[3,]    3    8   NA   18   23
#[4,]    4    9   14   NA   24
#[5,]    5   10   15   20   NA

1
谢谢。我认为这比使用赋值运算符更适合管道操作。 - rm167

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接