首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将R中的时间间隔数据更改为一分钟一分钟的数据?

如何将R中的时间间隔数据更改为一分钟一分钟的数据?
EN

Stack Overflow用户
提问于 2020-08-10 01:35:48
回答 1查看 239关注 0票数 1

我的数据有关于时间间隔和活动的信息(由1,0表示)。例如,

代码语言:javascript
运行
复制
  ID#   Time_Start  Time_End   Activity 
   1     10:05:58   10:07:11      1
   1     10:07:12   10:10:01      0

我想把时间缩短到最近的一分钟,并把这些数据转换成一分钟一分钟的数据。例如,

代码语言:javascript
运行
复制
  ID#   Time    Activity 
   1    10:05       1
   1    10:06       1      
   1    10:07       1
   1    10:08       0
   1    10:09       0

我如何在R中转换这个?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-10 01:50:06

我们可以将Time_StartTime_End值更改为POSIXct,并使用floor_date将其舍入到最近的分钟。然后在开始值和结束值之间创建一个间隔为每分钟的序列,只保留唯一的值,并以所需的格式获取Time

代码语言:javascript
运行
复制
library(dplyr)

df %>%
  mutate(across(starts_with('Time_'), ~lubridate::floor_date(
                                 as.POSIXct(.,format = "%T"), 'minute')), 
         Time = purrr::map2(Time_Start, Time_End, seq, by = 'min')) %>%
  tidyr::unnest(Time) %>%
  select(-starts_with('Time_')) %>%
  distinct(ID, Time, .keep_all = TRUE) %>%
  mutate(Time = format(Time, '%H:%M'))

#     ID Activity Time 
#  <int>    <int> <chr>
#1     1        1 10:05
#2     1        1 10:06
#3     1        1 10:07
#4     1        0 10:08
#5     1        0 10:09
#6     1        0 10:10

数据

代码语言:javascript
运行
复制
df <- structure(list(ID = c(1L, 1L), Time_Start = c("10:05:58", "10:07:12"
), Time_End = c("10:07:11", "10:10:01"), Activity = 1:0), 
class = "data.frame", row.names = c(NA, -2L))
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63333034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档