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

在R中按ID将分类变量替换为众数,无众数时替换为最大值

解决方案

使用dplyr包实现

先将字符型的V1转换为数值型,再按ID分组计算目标值:

# 加载dplyr包
library(dplyr)

# 示例数据
my_data <- data.frame(ID = c("2", "2", "2", "2" ,"4", "4", "4", "4"),
                      V1 = c("2", "1", "2", "1", "3", "1", "4", "3"))

# 处理逻辑
my_data <- my_data %>%
  mutate(V1 = as.numeric(V1)) %>%  # 转换为数值型,确保最大值计算准确
  group_by(ID) %>%
  mutate(V2 = {
    # 统计当前组内V1各值的出现频率
    freq_table <- table(V1)
    # 找到最高频率值
    max_frequency <- max(freq_table)
    # 筛选出所有达到最高频率的V1值
    candidate_values <- as.numeric(names(freq_table[freq_table == max_frequency]))
    # 从候选值中取最大值
    max(candidate_values)
  }) %>%
  ungroup()

# 查看结果
print(my_data)

使用Base R实现

如果不想加载额外包,用ave()函数也能完成:

# 示例数据
my_data <- data.frame(ID = c("2", "2", "2", "2" ,"4", "4", "4", "4"),
                      V1 = c("2", "1", "2", "1", "3", "1", "4", "3"))

# 转换V1为数值型
my_data$V1 <- as.numeric(my_data$V1)

# 按ID分组计算V2
my_data$V2 <- ave(my_data$V1, my_data$ID, FUN = function(x) {
  freq_table <- table(x)
  max_frequency <- max(freq_table)
  candidate_values <- as.numeric(names(freq_table[freq_table == max_frequency]))
  max(candidate_values)
})

# 查看结果
print(my_data)

结果说明

运行上述代码后,得到的结果符合预期:

  • ID为"2"的组中,V1的1和2出现频率均为2,取最大值2作为V2;
  • ID为"4"的组中,V1的3出现频率最高(2次),取3作为V2。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 11:22:20