【问题标题】:Change time from 1 hour to 30 mins将时间从 1 小时更改为 30 分钟
【发布时间】:2021-03-24 10:21:06
【问题描述】:

为我询问并回答了之前的问题,请参见此处:(subsetting data based on four columns using if else statements)

请他们解决了这个问题,但我有一个后续问题,如何将代码中的时间从 1 小时更改为 30 分钟?

df %>% 
  group_by(Location, Site, Species, Date) %>% 
  mutate(difftime = as.numeric(hms::as_hms(Time) - hms::as_hms(lag(Time, 1)))/3600) %>%
      mutate(independent = case_when(
        is.na(difftime) ~ TRUE,
        difftime >= 1 ~ TRUE,
        difftime < 1  ~ FALSE,
        TRUE ~ FALSE)

我尝试了很多代码更改,但无法找到满意的答案!

【问题讨论】:

  • 您能否仅在此处分享您的完整/独立问题。对于链接,必须检查以前的问题并回答两者。
  • 顺便说一句,只需将1 替换为0.5 即可!还是我错过了什么?

标签: r


【解决方案1】:

建议使用 baseR 中的 difftime 函数,而不是直接减去时间单位,如果可以具体提供单位。在以下语法中,我使用unit = "mins" 在几分钟内获得输出,然后相应地更改您的语法。

df %>% 
  group_by(Location, Site, Species, Date) %>% 
  mutate(difftime = as.numeric(difftime(hms::as_hms(Time), hms::as_hms(lag(Time, 1)) , unit = "mins"))) %>%
  mutate(independent = case_when(
    is.na(difftime) ~ TRUE,
    difftime >= 30 ~ TRUE,
    difftime < 30  ~ FALSE,
    TRUE ~ FALSE)
  )

数据

df <- readr::read_table2("Location       Site     Species    Date     Time
Twelve         2        frog       14-10    13:45
Twelve         2        frog       14-10    14:45
Twelve         2        frog       14-10    15:44
Twelve         2        badger     14-10    15:44
Thirteen       2        badger     14-10    16:44
Thirteen       2        badger     14-10    17:42")

【讨论】:

  • 感谢您的帮助,当我运行您的代码时,我意识到我的代码存在问题。我的 CSV 中的时间列被格式化为数字而不是时间,所以当我运行两组代码(30 分钟,1 小时)时,我得到了相同的结果。当我将列更改为时间时,我得到了两个不同的结果。有没有办法让函数处理我格式化为数字的列?
猜你喜欢
  • 1970-01-01
  • 2022-11-27
  • 2016-05-05
  • 1970-01-01
  • 2021-07-16
  • 2014-11-17
  • 2017-01-24
  • 2020-01-30
  • 2011-10-27
相关资源
最近更新 更多