使用dplyr如何高效实现不同列间的差值计算?
解决不同列间差值计算的问题
你的需求是计算不同列之间的逐行差值(y-x、z-y),而你之前用lag()的写法是计算同列内上下行的差值,这是两者的核心区别。
直接指定列计算(适合明确列对的场景)
最直接的方式就是在mutate()里直接定义新列,逐行计算对应列的差值:
# 创建原始数据集 a <- data.frame(x = c(1:5), y = c(0:4), z = c(2:6)) # 计算列间差值并添加新列 a <- a %>% mutate(`y-x` = y - x, `z-y` = z - y)
运行后得到的结果就是你期望的:
x y z y-x z-y 1 1 0 2 -1 2 2 2 1 3 -1 2 3 3 2 4 -1 2 4 4 3 5 -1 2 5 5 4 6 -1 2
通用化处理(适合多列相邻差值的场景)
如果你的数据集有很多列,需要批量计算相邻列的后列减前列,可以用以下方法,避免手动逐个写列名:
a <- a %>% mutate(across(2:ncol(.), ~ . - get(colnames(.)[cur_column() - 1]), .names = "{colnames(.)[cur_column() - 1]}-{.col}"))
这个代码会自动对第2列到最后一列,计算当前列与前一列的差值,新列名格式为前列名-当前列名,对于你的数据集,同样会生成符合需求的列间差值。
内容的提问来源于stack exchange,提问作者felipe_silva
相关产品推荐
相关产品推荐

