使用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
相关产品推荐
相关产品推荐

