You need to enable JavaScript to run this app. R语言按Cancer分组并转置输出癌症对应频率的实现方法
优惠活动
大模型
产品
解决方案
定价
更多

R语言按Cancer分组并转置输出癌症对应频率的实现方法

R 按Cancer字段分组转置为宽表的实现方案

针对两列结构数据集(Cancer列存储各类癌症名称、Frequency列存储对应关联频率),需要生成“每类癌症为独立列、列下对应展示关联频率值”的宽表,可根据使用习惯选择以下可直接复用的实现方式:


基础R原生实现(无需安装第三方包)

依托基础包自带函数完成转置,适合轻量无依赖的使用场景:

# 模拟原始数据结构,可直接替换为实际读取的数据源
raw_data <- data.frame(
  Cancer = c("CNS-PiloAstro", "Eso-AdenoCa", "ColoRect-AdenoCA", "Liver-HCC"),
  Frequency = c(0.14, 0.09, 0.22, 0.17)
)

# 转置为目标宽表
wide_data <- as.data.frame.matrix(
  xtabs(Frequency ~ Cancer, data = raw_data)
) |> t() |> as.data.frame()

执行完成后,所有癌症名称会自动识别为新表的列名,列下自动匹配填充对应频率值。


tidyverse生态实现(可读性优先)

使用tidyr包的pivot_wider函数(R官方推荐的长转宽标准写法),逻辑直观易维护:

# 首次使用执行安装
install.packages(c("tidyr", "dplyr"))
library(tidyr)
library(dplyr)

# 核心转置逻辑
wide_data <- raw_data |>
  pivot_wider(
    names_from = Cancer, # 将Cancer列的所有取值作为新表列名
    values_from = Frequency # 对应列下填充匹配的Frequency值
  )

注意:如果原始数据存在同一癌症名称对应多个Frequency值的情况,可补充参数values_fn = list(Frequency = ~mean(.x))指定聚合规则,避免函数报错。


data.table实现(大数据量场景优先)

如果原始数据规模达到百万行以上,该方法的运行性能比前两种方式高一个数量级:

# 首次使用执行安装
install.packages("data.table")
library(data.table)

# 转换为data.table格式并完成转置
setDT(raw_data)
wide_data <- dcast(raw_data, . ~ Cancer, value.var = "Frequency")
# 移除自动生成的无意义主键列
wide_data[, `.` := NULL]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 06:06:02