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

基于事件时间值矩阵生成偏移值转换矩阵的技术问询

R语言矩阵按规则转换实现

原始矩阵

首先定义输入的原始矩阵:

original_mat <- structure(c(0, 0, NA, NA, NA, NA, 0, 0, NA, NA, NA, 1, NA, NA, 
NA, NA, 0, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, 
1, 0, NA, NA, NA, NA, NA, 0, NA, NA, NA, 1, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, 1, NA, NA, 0, 
1, 1, 0, NA, NA, 0, 1, 1, NA, 1, 0, 0, 0, NA, NA, 0, 1, 1, 0, 
0, 1, 0, 0, 0, 0, 1, 1, NA, NA, 0, 1, 1, 0, NA, NA, 1, 1, NA, 
NA, 1, 0, 1, 1, NA, NA, 0, 1, 1, 1, 0, 1, 0, NA, NA, NA, NA, 
NA, NA, NA, 0, 1, 1, 0, NA, NA, 1, 1, NA, NA, 1, 0, NA, NA, NA, 
NA, 0, 1, NA, NA, 0, 1, 0, NA, NA, NA, NA, NA, NA, NA, NA, 1, 
1, 0, NA, NA, 1, 1, NA, NA, 1, 0, NA, NA, NA, NA, 0, 1, NA, NA, 
1, 1, 0, NA, NA, NA, NA, NA, NA, NA, NA, 1, 1, 0, NA, NA, 1, 
1, NA, NA, 1, 0, NA, 1, NA, NA, 1, 1, NA, NA, NA, NA, 0, NA, 
NA, NA, NA, NA), dim = c(30L, 7L), dimnames = list(c("1", "2", 
"3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", 
"15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", 
"26", "27", "28", "29", "30"), c("1", "2", "4", "5", "6", "7", 
"8")))

转换规则

  • 原矩阵行中的0转换为-1;
  • 原行中0右侧的1,转换后的值为该1的位置索引与最近左侧0的位置索引之差减1;
  • 原行中无0但有1时,以第一个1的位置为起始点,后续1转换为当前位置索引与第一个1位置索引之差;
  • 原行中的NA保持不变。

实现代码

通过自定义单行转换函数,结合apply逐行处理矩阵:

# 定义单行转换函数
convert_row <- function(x) {
  res <- x
  # 处理0的转换
  res[x == 0] <- -1
  # 定位所有1的位置
  one_pos <- which(x == 1)
  if (length(one_pos) == 0) return(res)
  # 定位所有0的位置
  zero_pos <- which(x == 0)
  
  for (p in one_pos) {
    # 找到当前1左侧最近的0
    left_zeros <- zero_pos[zero_pos < p]
    if (length(left_zeros) > 0) {
      res[p] <- p - max(left_zeros) - 1
    } else {
      # 无0时以第一个1为基准
      first_one <- min(one_pos)
      res[p] <- p - first_one
    }
  }
  return(res)
}

# 应用转换并保留行列名
converted_mat <- t(apply(original_mat, 1, convert_row))
dimnames(converted_mat) <- dimnames(original_mat)

验证结果

查看转换后的前5行:

head(converted_mat)

输出:

1  2  4  5  6  7  8
1 -1  0  1  2  3  4  5
2 -1  0  1  2  3  4  5
3 NA NA NA NA NA NA NA
4 NA NA NA NA NA NA NA
5 NA NA NA NA NA NA NA
6 NA NA NA NA NA NA NA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:46:08