R语言 如何在R中按组计算与数据框前一行的时间差
一个数据框架可能由属于组的不同值组成。列可以有属于不同数据类型的值,或作为POSIXct对象的时间框架。这些对象允许轻松地应用数学运算,可以通过以下方式进行。
方法1:使用dplyr包
group_by方法是用来根据特定列中包含的组来划分和隔离日期的。需要分组的列被指定为这个函数的参数。它可以包含多个列名。
语法 。
group_by(col1, col2, …)
接下来是应用mutate()方法,用于转移方向和对数据进行操作。可以使用新的列名来指定新的列名。与前一行的差异可以通过这个库的lag()方法来计算。这个方法可以找到一个向量中的前一个值。
语法。
lag(x, n = 1L, default = NA)
参数:
- x – 一个值的向量
- n – 要滞后的位置数
- default (默认:NA)–用于不存在的行的值。
任何组的第一次出现都会被NA值取代。
例子 。
输出
方法2:使用tapply方法
tapply()方法被用来在列表或数据框架对象上应用一个函数。指定的函数,可以是用户定义的,也可以是预先定义的,被应用于数据框架对象的每个单元格。
语法。
tapply(X, INDEX, FUN )
参数 :
- X – 一个R对象,一个数据框架。通常是矢量的,允许用[.]进行子设置。
- INDEX – 一个或多个因子的列表,每个因子的长度与X相同,这些元素通过as.factor被强制转换成因子。
- FUN – 一个要应用的函数
在这种情况下,该函数是计算时间框架的差异,单位是秒。在一个组中遇到的所有数值的第一个实例都被替换为零。
例子 。
输出
方法3:使用data.table
可以添加一个新的列来计算data.table中各行的时间差。difftime()方法可以用来计算这个差异。它是用来计算时间间隔或差异的。
语法。
difftime (t1 , t2 , units)
参数:
- t1, t2 – 日期时间或日期对象。
- units – 以字符串形式表示的单位,用于返回结果
为了找到下一个时区值,即在difftime()中应用的t2,shift()方法被用来在指定的输入向量或列表中诱发提前或滞后。
语法。
shift (x , fill )
参数:
- x – 矢量、列表、数据框或数据表。
- fill – 要引入的填充值的指标
by属性被添加到按指定列名的数据组中。
例子 。
输出