代码之家  ›  专栏  ›  技术社区  ›  cogitoergosum

日期框未正确分析H:M:S

  •  1
  • cogitoergosum  · 技术社区  · 6 年前

    我想读一本。将包含日期和时间列的csv文件放入数据框中。这是我的原始数据:

    10/05/18,0:00:03,SP-PALL-01,0.05
    10/05/18,0:00:03,SP-PDALL-05,0.1
    10/05/18,0:00:03,PT33-PT34,0.21249676
    10/05/18,0:00:03,PT32-PT36,0.42838383
    10/05/18,0:00:03,SP-PDAH-03,0.6
    10/05/18,0:00:03,PT32-PT34,0.60584164
    10/05/18,0:00:03,SP-PDAH-04,0.7
    10/05/18,0:00:03,PT-31,2.4700246
    10/05/18,0:00:03,PT32-PT31,12.394566
    10/05/18,0:00:03,PT-32,14.782079
    

    我用了这个的一个变体 answer :

    setClass('tagDate')
    setClass('tagTime')
    setAs("character","tagDate", function(from) as.Date(from, format="%d/%m/%y"))
    setAs("character","tagTime", function(from) as.POSIXct(from, format="%H:%M:%S"))
    df <- read.csv('allTags-cleanup-copy.csv',header = FALSE, colClasses=c('tagDate','tagTime','character','real'))
    names(df) <- c('tagDate', 'tagTime', 'tagName', 'tagValue')
    head(df)
    

    这是我的结果:

         tagDate             tagTime     tagName  tagValue
    1 2018-05-10 2018-05-10 00:00:03  SP-PALL-01 0.0500000
    2 2018-05-10 2018-05-10 00:00:03 SP-PDALL-05 0.1000000
    3 2018-05-10 2018-05-10 00:00:03   PT33-PT34 0.2124968
    4 2018-05-10 2018-05-10 00:00:03   PT32-PT36 0.4283838
    5 2018-05-10 2018-05-10 00:00:03  SP-PDAH-03 0.6000000
    6 2018-05-10 2018-05-10 00:00:03   PT32-PT34 0.6058416
    

    对于时间列,我尝试了分隔符和格式字符串的变体,但没有成功。

    你能帮我成功解析这个数据集吗?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Kim    6 年前

    这个 lubridate 图书馆让你无需做任何事情 setClass 提前这是一个快捷方式:首先阅读 df 具有 colClasses 作为所有字符。然后

    library(tidyverse) ## For %>% pipes
    library(magrittr)  ## For %<>% pipes (convenience)
    library(lubridate) ## For parsing dates
    
    df %<>%
      dplyr::mutate(
        tagDate = as.Date(parse_date_time(tagDate, 'mdy')),
        tagTime = format(parse_date_time(tagTime, 'HMS'),
                         format = '%H:%M:%S')
      )
    

    基本上,您只需更改 tagTime

        2
  •  1
  •   MKR    6 年前

    可能使用 hms 包是一个转换选项 time 列来自 character 并存储为 difftime

    library(hms)
    
    setClass('tagDate')
    setClass('tagTime')
    setAs("character","tagDate", function(from) as.Date(from, format="%d/%m/%y"))
    setAs("character","tagTime", function(from) as.hms(from)) #Changing to difftime
    df <- read.csv(textConnection(text),header = FALSE,
                      colClasses=c('tagDate','tagTime','character','real'))
    names(df) <- c('tagDate', 'tagTime', 'tagName', 'tagValue')
    head(df)
    
    #       tagDate  tagTime     tagName   tagValue
    # 1  2018-05-10 00:00:03  SP-PALL-01  0.0500000
    # 2  2018-05-10 00:00:03 SP-PDALL-05  0.1000000
    # 3  2018-05-10 00:00:03   PT33-PT34  0.2124968
    # 4  2018-05-10 00:00:03   PT32-PT36  0.4283838
    # 5  2018-05-10 00:00:03  SP-PDAH-03  0.6000000
    # 6  2018-05-10 00:00:03   PT32-PT34  0.6058416
    # 7  2018-05-10 00:00:03  SP-PDAH-04  0.7000000
    # 8  2018-05-10 00:00:03       PT-31  2.4700246
    # 9  2018-05-10 00:00:03   PT32-PT31 12.3945660
    # 10 2018-05-10 00:00:03       PT-32 14.7820790
    

    数据:

    text <- "10/05/18,0:00:03,SP-PALL-01,0.05
    10/05/18,0:00:03,SP-PDALL-05,0.1
    10/05/18,0:00:03,PT33-PT34,0.21249676
    10/05/18,0:00:03,PT32-PT36,0.42838383
    10/05/18,0:00:03,SP-PDAH-03,0.6
    10/05/18,0:00:03,PT32-PT34,0.60584164
    10/05/18,0:00:03,SP-PDAH-04,0.7
    10/05/18,0:00:03,PT-31,2.4700246
    10/05/18,0:00:03,PT32-PT31,12.394566
    10/05/18,0:00:03,PT-32,14.782079"