r - 用两行中的值减去所有列
问题描述
如果我想获取第 2 行中的所有列并用第 1 行中的值减去它们,我应该使用什么代码。我想在整个数据集中执行此操作。即第 4 行 - 第 3 行,第 6 行 - 第 5 行,依此类推。
解决方案
数据
> mtcars[1:3, ]
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
使用基础 R
as.data.frame(lapply(mtcars[1:3, ], function(x) c(NA, diff(x))))
mpg cyl disp hp drat wt qsec vs am gear carb
1 NA NA NA NA NA NA NA NA NA NA NA
2 0.0 0 0 0 0.00 0.255 0.56 0 0 0 0
3 1.8 -2 -52 -17 -0.05 -0.555 1.59 1 0 0 -3
使用 dplyr:
library(dplyr)
选项1
> mutate(mtcars[1:3, ], across(everything(), ~. - lag(.)))
mpg cyl disp hp drat wt qsec vs am gear carb
1 NA NA NA NA NA NA NA NA NA NA NA
2 0.0 0 0 0 0.00 0.255 0.56 0 0 0 0
3 1.8 -2 -52 -17 -0.05 -0.555 1.59 1 0 0 -3
选项 2
> mutate_all(mtcars[1:3, ], ~. - lag(.))
mpg cyl disp hp drat wt qsec vs am gear carb
1 NA NA NA NA NA NA NA NA NA NA NA
2 0.0 0 0 0 0.00 0.255 0.56 0 0 0 0
3 1.8 -2 -52 -17 -0.05 -0.555 1.59 1 0 0 -3
在这段代码中,~. - lag(.)
是一个匿名函数,就像function(x) x - lag(x)
.
mutate_if(your_data, is.numeric, ~. - lag(.))
如果您的数据包含非数字变量,则可以使用新方法或变体来做到这一点而不会出错across()
。
推荐阅读
- javascript - 工作“类型”定义文件,有人吗?
- django - The HTML file changed on server is not reflected
- jquery - 如何处理 Angular 8 组件类中的 jquery Treeview 事件?
- python - 如何获得自 1970 年 1 月 1 日以来 Python 日期时间对象的秒数?
- python-3.x - 我怎样才能完成这个项目?它关于情感分类
- ios - 过期的 iOS 开发者/分发证书
- typescript - 如何在类型定义上部分使用计算的属性名称
- c# - Xcode:如何将 Unity 游戏添加到现有的 iOS 应用程序?
- java - 如何减少Java中的循环
- webpack - 如何在 Vue Nuxt.js 中使用 SASS(不是 SCSS)