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

如何用R语言检测调研数据单条行内的重复值?

嘿,这个需求太贴合问卷数据清洗的场景了——检测敷衍/随机作答对吧?针对你的EPFL社区调研数据集(1797行、23个1-5量表的环保行为问题),我给你几个实用的R方案,一步步帮你按行提取重复值并识别可疑作答:

方案1:基础R快速统计每行重复值频率

如果习惯用基础R语法,这个方法高效直接,能快速拿到每行最常出现的数值及次数:

# 先定义要分析的23个环保行为变量列(假设第2-24列是行为问题,第1列是受访者ID)
behavior_cols <- 2:24

# 按行计算重复值统计:最频繁的数值、出现次数、总问题数
row_dupe_stats <- t(apply(epfl_data[, behavior_cols], 1, function(row) {
  freq_table <- table(row)
  max_repeat_count <- max(freq_table)
  most_common_val <- names(freq_table)[which.max(freq_table)]
  c(most_common_value = most_common_val, max_repeats = max_repeat_count, total_questions = length(row))
}))

# 转成数据框方便后续合并或筛选
row_dupe_stats <- as.data.frame(row_dupe_stats, stringsAsFactors = FALSE)
row_dupe_stats$max_repeats <- as.integer(row_dupe_stats$max_repeats)
row_dupe_stats$total_questions <- as.integer(row_dupe_stats$total_questions)

# 可以和原数据集合并查看
epfl_data <- cbind(epfl_data, row_dupe_stats)

比如你想找所有超过15个相同答案的行,直接filter(epfl_data, max_repeats > 15)就行。

方案2:用tidyverse做灵活的行级分析

如果需要更灵活的分组、筛选或可视化,用dplyr+tidyr的长格式处理更顺手:

library(dplyr)
library(tidyr)

# 先给每行加唯一标识(如果数据集没有受访者ID的话)
epfl_data <- epfl_data %>% mutate(respondent_id = row_number())

# 转成长格式,按受访者分组统计每个答案的出现次数
row_dupe_tidy <- epfl_data %>%
  pivot_longer(cols = all_of(behavior_cols), names_to = "question", values_to = "response") %>%
  group_by(respondent_id, response) %>%
  tally(name = "repeat_count") %>%
  arrange(respondent_id, desc(repeat_count)) %>%
  slice(1) # 保留每个受访者出现次数最多的答案

# 和原数据集合并,方便查看每个受访者的重复情况
epfl_data_with_stats <- epfl_data %>%
  left_join(row_dupe_tidy, by = "respondent_id")
额外技巧:精准检测全选"3"的可疑作答

如果重点关注大量选"3"的随机行为,可以直接统计每行中"3"的出现次数:

# 统计每行中"3"的数量
epfl_data$count_3 <- apply(epfl_data[, behavior_cols], 1, function(row) sum(row == 3))

# 筛选出超过20个"3"的可疑行(可根据需求调整阈值)
suspect_random_rows <- epfl_data %>% filter(count_3 > 20)
辅助判断:用行内标准差识别集中作答

另一个判断随机作答的小技巧:计算每行答案的标准差,标准差越小说明答案越集中(比如全选同一个值):

epfl_data$row_response_sd <- apply(epfl_data[, behavior_cols], 1, sd)

# 标准差接近0的行,大概率是敷衍作答
highly_suspect <- epfl_data %>% filter(row_response_sd < 0.5)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:05:08