在 R 中使用具有不寻常日期格式的 lubridate

问题描述

我有一个数据集,我试图处理它的日期格式为数字日-月缩写(即 24-Feb)。我想使用 mutate 和 lubridate 将它们分成两个新列,一个用于日,一个用于月。我在处理数字和缩写的语法方面遇到了问题。下面的代码,我认为是我想要做的不起作用。提前致谢。

import { Component,createRef } from "react";

class GridView extends Component {

  constructor(props) {
    super(props);
    this.state = {
      hasScrolled: false
    }
    
    this.handleScrollEvent = this.handleScrollEvent.bind(this);
  }

  handleScrollEvent() {
    this.setState({hasScrolled: true})
  }

  render() {
    return <div onScroll={ this.handleScrollEvent } > ... some scrollable content </div>
  }
  
}

解决方法

最好的办法是在您的专栏中paste正确的年份,例如使用 stringr::str_c

data.frame(Date = "24-Feb") %>% 
    mutate(Date = dmy(stringr::str_c(Date,"2021")))
#        Date
# 1 2021-02-24

您可以使用 objects 检查包提供的对象。

objects("package:lubridate",pattern = "dm")
# [1] "dmicroseconds" "dmilliseconds" "dminutes"      "dmy"          
# [5] "dmy_h"         "dmy_hm"        "dmy_hms"       "ydm"          
# [9] "ydm_h"         "ydm_hm"        "ydm_hms" 
,

1. dmy()truncated = 1L

ymd() 函数系列的 lubridate 接受一个 truncated 参数,该参数表明可以省略多少格式。因此,

library(dplyr)
library(lubridate)
df <- tibble(bday = c("24-Feb","25-Apr"))

df %>% 
  mutate(Date = dmy(bday,truncated = 1L))
# A tibble: 2 x 2
  bday   Date      
  <chr>  <date>    
1 24-Feb 2021-02-24
2 25-Apr 2021-04-25

2. separate()

OP 已请求

我想用 mutate 和 lubridate 把它们分成两个新的 一列表示日,一列表示月。

bdayDay 列中拆分 Month 可以直接实现,无需创建 Date 列的中间步骤:

library(tidyr)
df %>% 
  separate(bday,c("Day","Month"),"-",remove = FALSE)
# A tibble: 2 x 3
  bday   Day   Month
  <chr>  <chr> <chr>
1 24-Feb 24    Feb  
2 25-Apr 25    Apr