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

使用R查找指定刺激列中存在重复顺序值的数据行

数据清洗:找出刺激顺序列中的重复值问题

现有一份记录被试注意刺激顺序的数据集,id标识被试,stim1至stim4列代表不同刺激:

  • 1-4的数值表示注意刺激的顺序
  • 0代表未注意到该刺激,可视为NA

示例数据集:

df <- data.frame(id=c('A', 'B', 'C', 'D', 'E', 'F'),
                 stim1=c(1, 0, 1, 1, 0, 1),
                 stim2=c(2, 2, 2, 2, 2, 2),
                 stim3=c(0, 1, 2, 3, 1, 2),
                 stim4=c(0, 3, 4, 0, 0, 4))

# 输出结果
#   id stim1 stim2 stim3 stim4
# 1  A     1     2     0     0
# 2  B     0     2     1     3
# 3  C     1     2     2     4
# 4  D     1     2     3     0
# 5  E     0     2     1     0
# 6  F     1     2     2     4

需求:找出stim1至stim4列中存在1-4重复值的行,目标是获取对应被试ID和重复值,用于修正录入错误(如被试C、F的重复值2)。理想输出格式:

C 2
F 2

方法1:使用dplyr按行处理(优雅方案)

核心思路:对每一行的刺激列先替换0为NA,筛选有效顺序值后检查重复,最终提取目标信息。

library(dplyr)
library(tidyr)

df %>%
  rowwise() %>%
  # 提取当前行的刺激值,替换0为NA并移除无效值
  mutate(stim_values = list(na.omit(c(stim1, stim2, stim3, stim4))),
         # 找出重复的数值(去重后保留重复项)
         duplicates = list(stim_values[duplicated(stim_values)])) %>%
  # 过滤出存在重复值的行
  filter(length(duplicates) > 0) %>%
  # 展开重复值(一行多重复值时会分别显示)
  unnest(duplicates) %>%
  # 保留需要的列并去重
  select(id, duplicates) %>%
  distinct()

运行结果:

# A tibble: 2 × 2
  id    duplicates
  <chr>      <dbl>
1 C              2
2 F              2

方法2:基础R实现方案

无需额外依赖包,用apply按行处理:

# 定义单行处理函数:返回重复值,无重复则返回NA
find_duplicates <- function(row) {
  # 排除id列,替换0为NA并移除,只保留1-4的有效顺序值
  stim_vals <- na.omit(row[-1])
  stim_vals <- stim_vals[stim_vals %in% 1:4]
  # 提取去重后的重复值
  dup_vals <- unique(stim_vals[duplicated(stim_vals)])
  return(if(length(dup_vals) > 0) dup_vals else NA)
}

# 应用函数到每一行
df$duplicates <- apply(df, 1, find_duplicates)

# 筛选并输出结果
result <- df[!is.na(df$duplicates), c("id", "duplicates")]
print(result)

运行结果:

id duplicates
3  C          2
6  F          2

说明

  • 两种方法都会自动忽略0(转为NA后移除),只关注1-4的有效顺序值
  • 若某行存在多个重复值(如同时重复2和3),会全部提取并显示
  • dplyr方案更适合嵌入复杂数据处理管道,基础R方案轻量无依赖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 21:47:29