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

在R中实现基于特定行均值建列及高频基因tail_len均值计算

R语言处理基因数据的两个需求解决方案

首先构建示例数据框:

df <- data.frame(
  gene = c("SPAC20G4.06c", "SPCC613.06", "SPAC6F6.03c", "SPAC20G4.06c", 
           "SPBC23G7.15c", "SPAC589.10c", "SPBC23G7.15c", "SPAC22H12.04c", 
           "SPAC22H12.04c", "SPAC6G10.11c", "SPAC589.10c", "SPBC18E5.06"),
  tail_len = c(3, 5, 2, 3, 5, 2, 3, 1, 12, 8, 31, 16)
)

需求1:统计频次最高的前10个基因并计算对应tail_len均值

使用dplyr包实现(简洁直观)

library(dplyr)

top10_gene_stats <- df %>%
  group_by(gene) %>%
  summarise(出现频次 = n(), tail_len均值 = mean(tail_len)) %>%
  arrange(desc(出现频次)) %>%
  slice_head(n = 10)

print(top10_gene_stats)

使用base R实现(无需额外包)

# 统计基因出现频次
gene_counts <- table(df$gene)
# 筛选频次最高的前10个基因(若基因总数不足10则取全部)
top10_genes <- names(sort(gene_counts, decreasing = TRUE))[1:min(10, length(gene_counts))]
# 计算这些基因的tail_len均值
top10_mean <- tapply(df$tail_len[df$gene %in% top10_genes], 
                     df$gene[df$gene %in% top10_genes], 
                     mean)
# 整理结果为数据框
top10_gene_stats_base <- data.frame(
  gene = names(top10_mean),
  出现频次 = gene_counts[names(top10_mean)],
  tail_len均值 = top10_mean
)

print(top10_gene_stats_base)

需求2:基于特定行的数值均值创建新列

以下两种常见场景供参考:

场景1:基于固定行号的均值创建全局新列

例如计算第1、3、5、7行的tail_len均值,将该值作为新列填充到所有行:

# 指定目标行号
target_rows <- c(1, 3, 5, 7)
# 计算指定行的均值
row_mean <- mean(df$tail_len[target_rows])
# 新增列
df$指定行tail_len均值 <- row_mean

print(df)

场景2:基于分组内特定行的均值创建分组新列

例如每个基因组内,取tail_len最小的2行的均值,作为该组所有行的新列值:

library(dplyr)

df <- df %>%
  group_by(gene) %>%
  mutate(组内最小2行tail_len均值 = mean(tail_len[order(tail_len)][1:min(2, n())])) %>%
  ungroup()

print(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:10:43