在R语言中按组计算当前行与组内首行的差值
在R语言中按组计算当前行与组内首行的数值差值
下面提供两种常用实现方法,针对你的数据集需求,新增列c展示每个a组内当前行b值与组内首行b值的差值:
方法1:使用dplyr包(tidyverse生态)
这是数据处理中可读性较强的常用方式:
# 若未安装dplyr,先运行 install.packages("dplyr") library(dplyr) # 构造数据集 a <- c(1,1,1,1,2,2,2,2) b <- c(2,4,6,8,10,12,14,16) have <- data.frame(a, b) # 直接用data.frame构造,避免cbind可能的类型转换问题 # 新增目标列c want <- have %>% group_by(a) %>% mutate(c = b - first(b)) %>% ungroup() # 可选:取消分组状态,便于后续操作 # 查看结果 want
运行输出:
# A tibble: 8 × 3 a b c <dbl> <dbl> <dbl> 1 1 2 0 2 1 4 2 3 1 6 4 4 1 8 6 5 2 10 0 6 2 12 2 7 2 14 4 8 2 16 6
方法2:使用基础R(无需额外安装包)
利用ave函数实现分组计算:
# 构造数据集 a <- c(1,1,1,1,2,2,2,2) b <- c(2,4,6,8,10,12,14,16) have <- data.frame(a, b) # 新增目标列c have$c <- ave(have$b, have$a, FUN = function(x) x - x[1]) # 查看结果 have
运行输出:
a b c 1 1 2 0 2 1 4 2 3 1 6 4 4 1 8 6 5 2 10 0 6 2 12 2 7 2 14 4 8 2 16 6
内容的提问来源于stack exchange,提问作者h09812349
相关产品推荐
相关产品推荐

