如何用tidyverse管道函数计算两组数据的比值?
使用tidyverse管道实现分组比值计算
问题说明
现有如下格式的原始数据,需要计算每个Var1对应的Group 0的Value除以Group 1的Value,生成以Var1为行、Div为列的结果表,希望用tidyverse的管道函数完成该操作。
原始数据
Var1 Group Value a 0 1 b 0 2 c 0 3 a 1 2 b 1 10 c 1 9
预期结果
Var1 Div a .5 b .2 c .3333
解决方案
可以借助tidyverse中的dplyr和tidyr包,通过链式管道一步完成:
library(tidyverse) # 假设你的原始数据存储在数据框df中 df %>% # 将长格式数据转为宽格式,Group的0和1作为列名 pivot_wider(names_from = Group, values_from = Value) %>% # 计算Div列:Group0的值除以Group1的值 mutate(Div = `0` / `1`) %>% # 只保留需要的两列 select(Var1, Div) %>% # 按预期结果保留小数位数(可选) mutate(Div = round(Div, 4))
代码解释
pivot_wider:把长表转为宽表,让每个Var1对应一行,同时将Group的两个取值(0和1)转为列,存储对应的Valuemutate:新增Div列,完成0组值除以1组值的计算select:筛选出最终需要的Var1和Div列- 最后的
round函数用于调整小数位数,匹配预期结果的格式,可根据实际需求修改保留的位数
内容的提问来源于stack exchange,提问作者William M.
相关产品推荐
相关产品推荐

