基于参考类别的行运算:计算各时间点与Cat的数值差值
按时间分组计算类别与参考值的差值(R语言实现)
原始数据
df <- data.frame(category = rep(c('Cat','Dog','Chicken'),2), value = c(3,4,5,4,6,7), time = c(rep(1,3),rep(2,3))) # 数据预览 df # category value time # Cat 3 1 # Dog 4 1 # Chicken 5 1 # Cat 4 2 # Dog 6 2 # Chicken 7 2
需求说明
针对每个time分组,计算各category的value与参考类别(Cat)的value差值,期望输出如下:
category value time Cat 0 1 Dog 1 1 Chicken 2 1 Cat 0 2 Dog 2 2 Chicken 3 2
解决方案
方法1:使用dplyr(tidyverse生态)
通过分组后批量计算差值,代码可读性强:
library(dplyr) df_result <- df %>% group_by(time) %>% mutate(value = value - value[category == "Cat"]) %>% ungroup() # 查看结果 df_result
方法2:使用base R
无需加载额外包,用ave函数实现分组运算:
df_result <- df df_result$value <- with(df, ave(value, time, FUN = function(x) x - x[category == "Cat"])) # 查看结果 df_result
两种方法均可得到目标输出,dplyr写法更直观,base R适合不想引入额外依赖的场景。
内容的提问来源于stack exchange,提问作者Squan Schmaan
相关产品推荐
相关产品推荐

