如何将时间点数据转换为带读数的区间表(支持R/tidyverse、Python实现)
R/tidyverse 实现方案
核心使用dplyr包的lead()函数提取下一行的时间和读数作为区间终点,实现逻辑极简:
# 加载依赖 library(tidyverse) # 构造示例数据 df <- tibble(Time = c(0, 1, 2, 3, 4), readings = c(123, 234, 145, 234, 121)) # 转换为区间表 df_interval <- df %>% mutate( To = lead(Time), End = lead(readings) ) %>% rename( From = Time, Initial = readings ) %>% drop_na()
运行后输出结果为4行区间数据,符合需求:
# A tibble: 4 × 4 From Initial To End <dbl> <dbl> <dbl> <dbl> 1 0 123 1 234 2 1 234 2 145 3 2 145 3 234 4 3 234 4 121
注意:执行转换前请确保原始数据已经按Time列升序排序,避免区间顺序错误
Python 实现方案
使用pandas的shift()函数偏移获取下一行值即可完成转换:
import pandas as pd # 构造示例数据 df = pd.DataFrame({'Time': [0,1,2,3,4], 'readings': [123,234,145,234,121]}) # 转换为区间表 df_interval = df.assign( To = df['Time'].shift(-1), End = df['readings'].shift(-1) ).rename( columns={'Time': 'From', 'readings': 'Initial'} ).dropna().reset_index(drop=True)
内容的提问来源于stack exchange,提问作者William Wong
相关产品推荐
相关产品推荐

