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

R语言如何保留向量/矩阵中仅出现一次的元素或列

R语言筛选矩阵中仅出现一次的列实现方法

基础duplicated函数默认仅标记重复项中第二次及之后出现的条目,不会标记首次出现的重复条目,unique则会保留重复项的首次出现版本,二者默认用法都无法直接剔除所有出现次数大于1的列,可通过双向重复判断的方式实现需求:

  • 首先复现测试矩阵:
A<-t(matrix(
c(0, 0, 1,
  0, 0, 0,
  0, 0, 1,
  0, 0, 1,
  0, 0, 0,
  1, 1, 0), 3, 6))
  • 核心实现逻辑:分别从正向、反向按列判断重复值,只要某列在任意一次判断中被标记为重复,就说明该列出现次数大于1,予以剔除。完整代码如下:
# MARGIN=2指定按列做重复判断
# 正向判断:标记第二次及之后出现的重复列
dup_forward <- duplicated(A, MARGIN = 2)
# 反向判断:标记倒序遍历下第二次及之后出现的重复列(正序下首次出现的重复列也会被标记)
dup_backward <- duplicated(A, MARGIN = 2, fromLast = TRUE)
# 保留所有未被标记为重复的列,drop=FALSE保证输出结果始终为矩阵格式
res <- A[, !(dup_forward | dup_backward), drop = FALSE]
  • 运行结果验证:
    执行代码后输出的res和预期结果完全一致:
> res
     [,1]
[1,]    1
[2,]    0
[3,]    1
[4,]    1
[5,]    0
[6,]    0

如果需要精简代码,也可以直接写成单行调用形式:

res <- A[, !(duplicated(A, 2) | duplicated(A, 2, fromLast = TRUE)), drop = FALSE]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:55:15