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

能否使用dplyr的mutate函数按两列分组进行值的除法运算?

解决方案

首先注意你的数据中Year和value都是字符类型,第一步需要先转换为数值类型才能进行计算。下面提供两种可行的方法:

方法一:分组后直接提取对应年份的值计算

library(dplyr)

# 转换数据类型并计算比值
result <- df %>%
  mutate(Year = as.integer(Year),
         value = as.numeric(value)) %>%
  group_by(Trt) %>%
  summarize(ratio = value[Year == 1] / value[Year == 0])

print(result)

运行后会得到每个Trt对应的Year1数值除以Year0数值的结果:

# A tibble: 3 × 2
  Trt   ratio
  <chr> <dbl>
1 A     0.333
2 B     1.67 
3 C     0.75 

方法二:先将年份转为列再计算

这种方法更直观,先把长格式转成宽格式后直接做除法:

library(dplyr)
library(tidyr)

result <- df %>%
  mutate(Year = paste0("Year", Year),
         value = as.numeric(value)) %>%
  pivot_wider(names_from = Year, values_from = value) %>%
  mutate(ratio = Year1 / Year0)

print(result)

输出结果:

# A tibble: 3 × 4
  Trt   Year1 Year0 ratio
  <chr> <dbl> <dbl> <dbl>
1 A         2     6 0.333
2 B         5     3 1.67 
3 C         3     4 0.75 

为什么你之前用group_by+mutate没成功?

大概率是因为数据类型没转换(字符无法直接做除法),或者mutate会保留原数据的行数,而你需要的是每个分组一行的汇总结果,这时候用summarize比mutate更合适。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 05:24:08