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

如何获取R数据框每行最频繁值首次出现的列名?

解决R数据框每行最频繁值首次出现列名的问题

你原代码的问题主要有两个:

  • 没有排除Participant列,导致计算频率时把字符型的参与者名称也纳入统计,结果偏离预期;
  • 返回的是频率最高的值本身,而非该值首次出现的列名,不符合需求。

解决方案代码

我们需要先过滤非数值列,再针对每行数值找到频率最高的值,最后定位该值首次出现的列名:

# 定义处理单行数据的自定义函数
get_first_max_col <- function(row) {
  # 提取当前行的数值部分(排除第一列Participant)
  num_vals <- row[-1]
  # 统计每个数值的出现频率
  freq_table <- table(num_vals)
  # 找到频率最高的数值(若多个值频率相同,取table中最先出现的项)
  max_freq_val <- as.numeric(names(which.max(freq_table)))
  # 定位该数值首次出现的索引
  first_index <- which(num_vals == max_freq_val)[1]
  # 返回对应的列名
  names(row)[-1][first_index]
}

# 将函数应用到数据框的每一行
result <- apply(test_data, 1, get_first_max_col)
print(result)

运行后输出的结果完全符合你的预期:

Lion      Cat      Dog    Snake    Tiger    Mouse 
"week_4" "week_0" "week_1" "week_0" "week_2" "week_3" 

关键细节说明

  • row[-1]:排除第一列的参与者名称,只处理数值型的周数据;
  • 转换max_freq_val为数值型:因为table返回的名称是字符格式,需要和原数值列匹配才能找到位置;
  • which(...)取第一个索引:确保拿到的是目标值首次出现的列位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:07:29