如何在R语言中按自定义日周期为日期时间分配实验夜整数编号?
解决方案:创建「Experiment Night」列(自定义昼夜周期)
核心思路
由于实验夜定义为当日12:00 PM至次日12:00 PM,我们需要先将每个时间点映射到对应的「实验夜基准日期」:
- 时间≥12:00的记录,基准日期为当前日期
- 时间<12:00的记录,基准日期为前一天日期
随后以9月1日为起始点,计算每个基准日期与起始日的天数差,加1即可得到实验夜编号(1至45)。
方法一:使用DateTime列处理(推荐)
利用已有的DateTime列直接操作,准确性更高:
- 确保
DateTime列为datetime类型:
import pandas as pd df['DateTime'] = pd.to_datetime(df['DateTime'])
- 生成实验夜基准日期:
df['Base_Date'] = df['DateTime'].apply( lambda x: x.date() if x.hour >= 12 else x.date() - pd.Timedelta(days=1) )
- 计算实验夜编号:
# 设置实验起始日期(替换为你的数据年份) start_date = pd.to_datetime('2023-09-01').date() end_date = pd.to_datetime('2023-10-15').date() df['Experiment Night'] = df['Base_Date'].apply( lambda x: (x - start_date).days + 1 if start_date <= x <= end_date else None )
方法二:使用单独的Month/Day/Time列处理
如果无法使用DateTime列,可先组合生成datetime对象再处理:
- 组合日期时间:
# 替换Year为你的数据年份 df['Combined_DateTime'] = pd.to_datetime( df[['Month', 'Day']].assign(Year=2023).astype(str).agg('-'.join, axis=1) + ' ' + df['Time'] )
- 重复方法一中的基准日期生成和编号计算步骤即可。
验证示例
| 原始DateTime | Base_Date | Experiment Night |
|---|---|---|
| 2023-09-01 13:00:00 | 2023-09-01 | 1 |
| 2023-09-02 01:00:00 | 2023-09-01 | 1 |
| 2023-09-02 12:30:00 | 2023-09-02 | 2 |
| 2023-10-15 12:00:00 | 2023-10-15 | 45 |
内容的提问来源于stack exchange,提问作者Cole
相关产品推荐
相关产品推荐

