我有一个大型矩阵,结构如下:
m = structure(c(NA,9,NA,NA,NA,
NA,NA,NA,NA,NA,
10,7,NA,12,11,
9,7,NA,NA,11,
10,8,NA,NA,NA),
.Dim = c(5L, 5L))
我只需要将值(不包括NA)从上对角线复制到下三角形,反之亦然,得到一个看起来像这样的矩阵:
m.result = structure(c(NA,9,10,9,10,
9,NA,7,7,8,
10,7,NA,12,11,
9,7,12,NA,11,
10,8,11,11,NA),
.Dim = c(5L, 5L))
任何建议表示赞赏!
您可以使用coalesce
中的dplyr
。
library(dplyr)
lt <- lower.tri(m1)
ut <- upper.tri(m1)
m[lt] <- coalesce(m[lt], m[ut])
m[ut] <- coalesce(m[ut], m[lt])
或ifelse
将其保留在基数R中:
m1[lt] <- ifelse(is.na(m1[lt]), m1[ut], m1[lt])
m1[ut] <- ifelse(is.na(m1[ut]), m1[lt], m1[ut])
在Ronak的答案帮助下找到了答案:
m1 = structure(c(NA,9,NA,NA,NA,
NA,NA,NA,NA,NA,
10,7,NA,12,11,
9,7,NA,NA,11,
10,8,NA,NA,NA),
.Dim = c(5L, 5L))
m1[lt] <- ifelse(is.na(lowerTriangle(m1, byrow=FALSE)), upperTriangle(m1, byrow=TRUE), lowerTriangle(m1, byrow=FALSE))
upperTriangle(m1) <- lowerTriangle(m1, byrow=TRUE)
m.result = structure(c(NA,9,10,9,10,
9,NA,7,7,8,
10,7,NA,12,11,
9,7,12,NA,11,
10,8,11,11,NA),
.Dim = c(5L, 5L))
identical(m1,m.result)