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

如何在R语言中按动物分组对十六进制颜色进行加权平均?

按Animal分组计算加权平均颜色的解决方案

要实现按Animal分组、以Bias为权重计算加权平均颜色,核心是先把十六进制颜色转换为可计算的RGB数值,完成加权平均后再转回十六进制格式,具体步骤如下:

完整代码实现

library(tidyverse)

# 假设数据已读入为dat.an,若未读入可执行:
# dat.an <- read_csv("dat.an")

weighted_avg_color <- dat.an %>%
  # 将十六进制颜色拆分为R、G、B通道的数值
  mutate(
    rgb = map(Colour, ~col2rgb(.) %>% as.vector()),
    R = map_dbl(rgb, ~.[1]),
    G = map_dbl(rgb, ~.[2]),
    B = map_dbl(rgb, ~.[3])
  ) %>%
  # 按Animal字段分组
  group_by(Animal) %>%
  # 计算各RGB通道的加权平均值,权重为Bias
  summarise(
    avg_R = weighted.mean(R, Bias),
    avg_G = weighted.mean(G, Bias),
    avg_B = weighted.mean(B, Bias),
    # 将平均后的RGB值转回十六进制颜色格式
    weighted_avg_colour = rgb(round(avg_R), round(avg_G), round(avg_B), maxColorValue = 255)
  ) %>%
  ungroup()

# 查看结果
print(weighted_avg_color)

代码解释

  • 颜色转RGB:用col2rgb()将十六进制颜色转换为0-255范围的RGB数值向量,再通过map_dbl拆分为单独的R/G/B列,方便后续计算。
  • 加权平均计算:使用weighted.mean()函数,以Bias作为权重,分别计算每组的R、G、B通道平均值。
  • RGB转回十六进制:用rgb()函数将平均后的数值转回十六进制,round()确保数值为整数(RGB值必须是0-255的整数),maxColorValue=255指定输入范围。

内容的提问来源于stack exchange,提问作者Ginko-Mitten

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 21:32:06