【问题标题】:Change all date format in dataframe更改数据框中的所有日期格式
【发布时间】:2019-02-13 13:25:07
【问题描述】:

我对 R 编程非常陌生,并且有点卡在这个: 我有一个数据框,我想检查任何行/列中是否有任何日期格式的值,是否应该只删除时间部分。 例如"2015-01-02 10:15:44"的日期字符串应更改为"10:15:44"

我知道,这是一种非常新手的方法,但这是我试图获取所有值的子字符串的方法。

id<-c(1,2,3,4)
time1<-c("2015-01-02 10:15:44","NA","2015-11-12 00:15:44","2015-01-02 12:15:14")
time2<-c("NA", "2015-01-02 10:15:44","NA","2015-11-12 00:15:44")
..
..
timen ....
print(df)

df<-data.frame(id,time1, time2,..., timen)
df[1:4 ,2: ncol(df)] <- substring(df[1:4 ,2: ncol(df)], 12)
print(df)

有人可以建议出路吗?

【问题讨论】:

    标签: r datetime dataframe date-format


    【解决方案1】:

    你试过包lubridate:

    time_cols <- c("time1", "time2")
    
    df[time_cols] <- apply(df[time_cols], 2, 
                           function(col){
                              format(lubridate::ymd_hms(col), "%H:%M:%S")
                           })
    df
    #     id    time1    time2
    #   1  1 10:15:44     <NA>
    #   2  2     <NA> 10:15:44
    #   3  3 00:15:44     <NA>
    #   4  4 12:15:14 00:15:44
    

    【讨论】:

    • 对不起,我只是在寻找核心功能的用法。但是你的方法教会了我关于 lubridate 的知识!再次感谢!
    【解决方案2】:

    遍历列和子字符串

    df[, 2:3] <- lapply(df[, 2:3], substring, first = 12)
    df
    #   id    time1    time2
    # 1  1 10:15:44         
    # 2  2          10:15:44
    # 3  3 00:15:44         
    # 4  4 12:15:14 00:15:44  
    
    # input data
    df <- data.frame(id = c(1,2,3,4),
                     time1 = c("2015-01-02 10:15:44","NA","2015-11-12 00:15:44","2015-01-02 12:15:14"),
                     time2 = c("NA", "2015-01-02 10:15:44","NA","2015-11-12 00:15:44"))
    

    【讨论】:

      【解决方案3】:

      试试这个:df1 包含您的数据。您可以在此操作后与原始数据重新组合。

          target<-unlist(sapply(stringr::str_extract_all(names(df1),"^t.*"),"["))
             Changed<-as.data.frame(sapply(target,function(x){ind=which(names(df1)==x)
             unlist(sapply(stringr::str_split(df1[,ind]," "),"[",2))}))
      cbind(id=df1$id,Changed)
      

      输出:

             id    time1    time2
             1    10:15:44     <NA>
             2     <NA>      10:15:44
             3   00:15:44       <NA>
             4    12:15:14 00:15:44
      

      【讨论】:

      • 这种方法在我幼稚的知识中看起来很复杂!稍后会回来了解它:)
      猜你喜欢
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      • 2019-01-20
      • 2016-02-19
      • 2020-06-20
      • 2017-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多