我在计算两列之间的条件时间差,谁能解释一下为什么第一行以秒为单位返回,第三行以分钟为单位返回?数据帧以group为单位进行分组.

library(dplyr)

source <- data.frame(
  group = c(1,1,2),
  start = as.POSIXct(c("2023-12-01 00:00:00", "2023-12-01 00:01:00", "2023-12-01 00:00:00")),
  end = as.POSIXct(c("2023-12-01 00:01:00", "2023-12-01 00:01:00", "2023-12-01 00:01:00")),
  boolean_flag = c(TRUE, TRUE, TRUE)
)

reprex <- source %>%
  group_by(group) %>%
  mutate(length = ifelse(boolean_flag, end - start, 0)) %>%
  ungroup()

reprex

screenshot of the reprex dataframe

我知道,如果我切换到if_else(),或者如果我使用带有unit="mins"difftime()而不是简单的减法,这个问题就不会再出现了,但是我在这里试图理解为什么当前的代码会发生这种情况.如果删除结尾与开头相同的第二行,问题也会消失.

Edit:

正如下面两个答案所指出的,使用此代码时,单位是特定于组的,它将被设置为适应组内存在的最小值.

下面更新的source个数据框也有间隔1天和1小时的记录,这一点很清楚:

source <- data.frame(
  group = c(1,1,2,3,3,4),
  start = as.POSIXct(c("2023-12-01 00:00:00", "2023-12-01 00:01:00", "2023-12-01 00:00:00", "2023-12-01 00:00:00", "2023-12-01 00:00:00", "2023-12-01 00:00:00")),
  end = as.POSIXct(c("2023-12-01 00:01:00", "2023-12-01 00:01:00", "2023-12-01 00:01:00", "2023-12-02 00:00:00", "2023-12-01 01:00:00", "2023-12-01 01:00:00")),
  boolean_flag = c(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE)
)

enter image description here

每组单位:

  • 组1:秒(由第二行设置)
  • 第二组:分钟数
  • 第三组:小时数(由第五行设定)
  • 第四组:天数

推荐答案

当减go 次数时,会调度difftime次,这会try 使用"漂亮的",而不是默认的单位.如果直接使用difftime,则可以设置单位.这并不完全特定于您的代码,但显然difftime分别应用于每个组,因此group_by是罪魁祸首,每个组都有自己的单元.

> reprex <- source %>%
+   group_by(group) %>%
+   mutate(length = ifelse(boolean_flag, difftime(end, start, units='secs'), 0)) %>%
+   ungroup()
> reprex
# A tibble: 3 × 5
  group start               end                 boolean_flag length
  <dbl> <dttm>              <dttm>              <lgl>         <dbl>
1     1 2023-12-01 00:00:00 2023-12-01 00:01:00 TRUE             60
2     1 2023-12-01 00:01:00 2023-12-01 00:01:00 TRUE              0
3     2 2023-12-01 00:00:00 2023-12-01 00:01:00 TRUE             60

我可以假设,您的实际代码更复杂,或者您为什么需要分组来计算each行的时间差?

R相关问答推荐

R绑定具有不同时间观察的两个数据帧

R图中的字体大小和字体样式(带有R底图)

过滤Expand.Grid的结果

使用预定值列表将模拟数量(n)替换为rnorm()

从有序数据中随机抽样

在R中查找每个组不同时间段的总天数

R等效于LABpascal(n,1)不同的列符号

R Highcharts与两个位置关联的注释

如何在xyplot中 for each 面板打印R^2

如何使用R对每组变量进行随机化?

删除具有相同标题的tabPanel(shinly)

未识别时区

如何将R中数据帧中的任何Nas替换为最后4个值

解析R函数中的变量时出现的问题

R中1到n_1,2到n_2,…,n到n_n的所有组合都是列表中的向量?

在R中,我如何使用滑动窗口计算位置,然后进行过滤?

变长向量的矢量化和

如何显示准确的p值而不是<;0.001*?

如何判断代码是否在R Markdown(RMD)上下文中交互运行?

使用同一行中的前一个值填充R矩阵中的缺失值