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

使用dplyr按cell分组计算wt与mut组的对数比值

使用dplyr计算每个cell分组下wt与mut的对数比值

没问题,用dplyr可以很简洁地实现这个需求,下面是具体的代码和步骤说明:

完整实现代码

# 先安装并加载dplyr包(如果还没安装的话)
# install.packages("dplyr")
library(dplyr)

# 你的原始数据框
x <- data.frame(cell = c(0,0,1,1,2,2), group = c('wt', 'mut', 'wt', 'mut', 'wt', 'mut'), val1 = c(4,5,7,1,7,8), val2 = c(1,4,2,3,5,6))

# 计算对数比值并格式化结果
result <- x %>%
  # 按cell分组,确保每个cell单独计算
  group_by(cell) %>%
  # 在每个分组内计算val1和val2的对数比值
  summarize(
    val1_ratio = log(val1[group == "wt"] / val1[group == "mut"]),
    val2_ratio = log(val2[group == "wt"] / val2[group == "mut"]),
    # 取消分组结构,返回普通数据框
    .groups = "drop"
  ) %>%
  # 将比值四舍五入到三位小数,和示例格式一致
  mutate(across(c(val1_ratio, val2_ratio), ~round(., 3)))

# 查看最终结果
print(result)

代码解释

  • group_by(cell):按cell列进行分组,保证我们对每个独立的cell分别计算wt和mut的比值
  • summarize():在每个分组内生成汇总统计量,这里通过val1[group == "wt"]提取当前cell下wt组的val1值,除以mut组的对应值后取自然对数(如果需要常用对数,替换为log10()即可)
  • .groups = "drop":默认dplyr在summarize后会保留分组结构,添加这个参数可以直接返回普通的非分组数据框,更符合你的需求
  • mutate(across(...)):通过across批量处理val1_ratio和val2_ratio列,将结果四舍五入到三位小数,和你提供的示例结果格式完全匹配

运行上述代码后,你会得到和示例完全一致的结果数据框。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 23:32:34