我想在数据帧中对块对角线应用两个功能,对块对角线元素应用第二个功能

问题描述 投票:0回答:1
df<- data.frame(a=c(1:10), b=c(21:30),c=c(1:10), d=c(14:23),e=c(11:20),f=c(-6:-15),g=c(11:20),h=c(-14:-23),i=c(4:13),j=c(1:10))

在此数据框中,我有三个块对角矩阵,如下图所示enter image description here

我想应用两个函数,一个是块对角线的正弦函数,第二个是其他元素的余弦函数,并生成数据帧的相同结构。

sin(df[1:2,1:2])
sin(df[3:5,3:5])
sin(df[6:10,6:10])
cos(the rest of the elements)
r matrix block diagonal
1个回答
2
投票

在其他位置创建一个带零的块对角线矩阵,然后使用该矩阵设置块对角线和非块对角线元素:

library(linpk)

ones <- function(n) matrix(1, n, n)
m <- as.matrix(df)
ifelse(blockdiag(ones(2), ones(3), ones(5)) == 1, sin(m), cos(m))

1
投票

如果您可以将结果存储在新的数据框中,则可以更改指令的顺序并按如下方式进行:

ndf <- cos(df)
ndf[1:2,1:2] <- sin(df[1:2,1:2])
ndf[3:5,3:5] <- sin(df[3:5,3:5])
ndf[6:10,6:10] <- sin(df[6:10,6:10])
© www.soinside.com 2019 - 2024. All rights reserved.