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

如何在R中筛选63000+行数据集里频率Top10的化合物子集

解决方案:提取Top10高频化合物并可视化浓度

问题根源

你之前的代码错误在于:

  • 第一种写法是按浓度值排序取前10行,而非统计化合物的出现频率,自然只会拿到少数高浓度化合物的记录
  • 第二种写法中arrange(desc(as.data.frame(table(df$Compound))))逻辑错误,table()返回的是频率统计结果,不能直接用于管道内的行排序
  • ggplot调用时不该用df$引用列,管道传递的数据已经是子集,直接用列名即可

简化实现代码

用dplyr管道一步完成「统计频率→筛选Top10→可视化」的流程:

library(dplyr)
library(ggplot2)

# 完整流程:统计频率取Top10 → 筛选对应数据 → 绘制箱线图+散点
df %>%
  # 给每一行添加对应化合物的出现次数
  add_count(Compound, name = "Frequency") %>%
  # 提取出现次数前10的化合物并筛选数据
  filter(Compound %in% (.$Compound[order(-.$Frequency)] %>% unique() %>% head(10))) %>%
  # 可视化:箱线图展示分布,散点补充原始数据
  ggplot(aes(x = reorder(Compound, -Frequency), y = Concentration)) +
  geom_boxplot(fill = "#4287f5", alpha = 0.7) +
  geom_jitter(width = 0.2, size = 1, color = "#ff5252", alpha = 0.5) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  labs(x = "Top10高频化合物", y = "浓度", title = "Top10化合物浓度分布")

代码说明

  1. add_count(Compound, name = "Frequency"):快速统计每个化合物的出现次数,并添加为新列
  2. filter(Compound %in% (...)):先按出现频率降序提取前10种化合物,再筛选原数据中对应行
  3. reorder(Compound, -Frequency):让x轴按化合物出现频率从高到低排列,展示更直观
  4. 箱线图+散点的组合既体现浓度分布趋势,也保留原始数据细节

更直观的分步写法

如果你习惯先单独拿到Top10化合物列表再筛选:

# 第一步:提取Top10高频化合物名称
top10_compounds <- df %>%
  count(Compound, sort = TRUE) %>% # 按出现次数降序统计
  head(10) %>%
  pull(Compound) # 提取化合物名称向量

# 第二步:筛选数据并可视化
df %>%
  filter(Compound %in% top10_compounds) %>%
  ggplot(aes(x = reorder(Compound, -Concentration, FUN = median), y = Concentration)) +
  geom_boxplot() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  labs(x = "Top10高频化合物", y = "浓度")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:15:33