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

是否有R函数可将QuPath样本Tile按基质占比分组至离散百分比区间?

高效划分基质占比区间并统计Tile数量(R实现)

方法1:使用cut()函数(最简洁高效)

cut()是R中专门为连续变量分箱设计的函数,完全适配你的需求,比嵌套ifelse简洁且性能更优。

操作步骤:

  1. 清理数据格式:如果你的Percent Stroma列带%符号,先转换为数值型:
# 假设数据框名为tile_data
tile_data$percent_stroma <- as.numeric(sub("%", "", tile_data$`Percent Stroma`))
  1. 划分区间:
# 定义区间边界(0到100,步长10)
breaks <- seq(0, 100, by = 10)
# 生成区间标签(如"0-10"、"10-20")
labels <- paste(breaks[-length(breaks)], breaks[-1], sep = "-")
# 添加区间列到数据框
tile_data$stroma_bin <- cut(
  tile_data$percent_stroma,
  breaks = breaks,
  labels = labels,
  include.lowest = TRUE  # 确保0%的Tile被归入第一个区间
)
  • 若存在超过100%的异常值,可将breaks调整为seq(0, 110, by = 10),或用right = FALSE修改区间闭合方向。
  1. 统计区间数量:
# 快速统计各区间Tile数
bin_counts <- table(tile_data$stroma_bin)
# 转换为易读的数据框格式
bin_counts_df <- as.data.frame(bin_counts)
colnames(bin_counts_df) <- c("Stroma Percentage Range", "Tile Count")

方法2:使用dplyr包(适配tidyverse工作流)

如果你习惯用管道式操作,dplyr的组合写法更流畅:

管道版cut()实现:

library(dplyr)

tile_data_processed <- tile_data %>%
  mutate(
    percent_stroma = as.numeric(sub("%", "", `Percent Stroma`)),
    stroma_bin = cut(
      percent_stroma,
      breaks = seq(0, 100, by = 10),
      labels = paste(seq(0, 90, 10), seq(10, 100, 10), sep = "-"),
      include.lowest = TRUE
    )
  ) %>%
  count(stroma_bin, name = "Tile Count") %>%
  rename(`Stroma Percentage Range` = stroma_bin)

用case_when()替代嵌套ifelse(更易读):

如果需要更灵活的区间定义,case_when()比多层ifelse结构清晰:

tile_data_processed <- tile_data %>%
  mutate(
    percent_stroma = as.numeric(sub("%", "", `Percent Stroma`)),
    stroma_bin = case_when(
      percent_stroma >= 0 & percent_stroma <= 10 ~ "0-10",
      percent_stroma > 10 & percent_stroma <= 20 ~ "10-20",
      percent_stroma > 20 & percent_stroma <= 30 ~ "20-30",
      percent_stroma > 30 & percent_stroma <= 40 ~ "30-40",
      percent_stroma > 40 & percent_stroma <= 50 ~ "40-50",
      percent_stroma > 50 & percent_stroma <= 60 ~ "50-60",
      percent_stroma > 60 & percent_stroma <= 70 ~ "60-70",
      percent_stroma > 70 & percent_stroma <= 80 ~ "70-80",
      percent_stroma > 80 & percent_stroma <= 90 ~ "80-90",
      percent_stroma > 90 & percent_stroma <= 100 ~ "90-100",
      TRUE ~ "Out of Range"  # 处理超出0-100的异常值
    )
  ) %>%
  count(stroma_bin, name = "Tile Count")

结果示例

最终统计结果会呈现为类似如下的格式:

Stroma Percentage RangeTile Count
0-102
10-201
40-502
50-601
60-701

优势说明

  • cut()是R底层优化的函数,处理大规模数据时速度远快于嵌套ifelse
  • 代码可维护性强:调整区间只需修改breaks参数,无需修改大量条件判断
  • 自动生成规范的区间标签,避免手动拼写错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:50:29