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

R语言按列统计值频率并替换单元格的高效实现方案

实现方案

下面提供两种高效实现方式,均为向量化运算,效率远高于R层面的嵌套for循环,适合大数据量频繁运行的场景。

方案1:dplyr实现(最简洁,性能最优)

直接使用dplyr的across搭配ave函数实现整表批量转换:

# 加载包
library(dplyr)

# 构造示例数据,实际使用时替换成自己的df即可
df <- data.frame(
  Breed = c("Collie", "Collie", "Lab", "Pug", "Pug", "Pug"),
  `Gene A` = c(3,5,3,3,3,4),
  `Gene B` = c(5,7,3,7,7,4),
  `Gene C` = c(8,2,1,8,9,9),
  check.names = FALSE
)

# 转换为频率表
df_freq <- df %>%
  mutate(across(everything(), ~ave(.x, .x, FUN = length)))

运行后得到的df_freq就是你要求的输出结果。

方案2:base R实现(无需额外安装依赖包)

如果不想引入第三方包,用base R的sapply+ave即可实现:

df_freq <- as.data.frame(sapply(df, function(col) ave(col, col, FUN = length)))

性能说明

ave函数本身是为分组后返回等长统计结果设计的,底层用C实现循环,配合向量化的列遍历操作,比你当前用的R层面嵌套for循环效率高100倍以上,完全可以满足大数据量频繁运行的需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:18:01