You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对称填充仅上三角有值的方阵(tibble)?

对称填充方阵Tibble的对角线下方NA值

问题说明

存在一个方阵结构的tibble,仅对角线及其上方的单元格有有效值,对角线下方的位置均为NA。需要将对角线下方的NA,用对角线上方对应对称位置的值进行填充。

示例代码

library(tidyverse)

Tibble <- tibble(A = c(5, NA, NA),
                 B = c(1, 3, NA),
                 C = c(6, 2, 4))

Tibble

当前输出

# A tibble: 3 × 3
      A     B     C
  <dbl> <dbl> <dbl>
1     5     1     6
2    NA     3     2
3    NA    NA     4

期望输出

# A tibble: 3 × 3
      A     B     C
  <dbl> <dbl> <dbl>
1     5     1     6
2     1     3     2
3     6     2     4

解决方案

方法1:矩阵转换法(高效简洁)

利用矩阵的下标对称性处理,适合大规模数据:

# 将tibble转为矩阵
mat <- as.matrix(Tibble)
# 填充对角线下方的元素:取转置矩阵对应位置的值
mat[lower.tri(mat)] <- t(mat)[lower.tri(mat)]
# 转回tibble格式
filled_tibble <- as_tibble(mat)

filled_tibble

方法2:Tidyverse行迭代法

贴合tidyverse的操作逻辑,逐行处理填充:

filled_tibble <- Tibble %>%
  mutate(row_id = row_number()) %>%
  rowwise() %>%
  mutate(
    across(A:C, ~ ifelse(is.na(.), pull(Tibble, cur_column())[row_id], .))
  ) %>%
  ungroup() %>%
  select(-row_id)

filled_tibble

内容的提问来源于stack exchange,提问作者Ian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 17:45:42