gpt4 book ai didi

r - 当某些部分为空时如何转换日期或日期时间字段; na.omit 失败

转载 作者:行者123 更新时间:2023-12-03 17:08:58 24 4
gpt4 key购买 nike

我有一个包含进出日期和时间的数据集。每行都是一个进出集,但有些是空白的。我可以使用 na.omit 删除空白并很好地读入(它是一个 csv,并且 na.strings=c("") 适用于 read.csv )。

当然,因为现实世界从来都不像教程,有的时候只是日期,所以我的as.POSIXlt(Dataset$In,format="%m/%d/%Y %H:%M")在“只有日期没有时间”上返回 NA。

na.omit 不会删除这些行。所以问题是2

  • 为什么 na.omit 不工作,或者我怎样才能让它工作?
  • 更好的是,如何在没有 2 次调用或格式字符串中使用某种可选参数的情况下将一列转换为日期和时间(采用 posix 格式)? (或者这甚至可能吗?)。

  • 这是日期和时间的示例。我无法共享真实文件,1 很大,2 是 PII。
    Id,In,Out
    1,8/15/2015 8:00,8/15/2015 17:00
    1,8/16/2015 8:04,8/16/2015
    1,8/17/2015 8:50,8/17/2015 18:00
    1,8/18/2015,8/18/2015 17:00
    2,8/15/2015,8/15/2015 13:00
    2,8/16/2015 8:00,8/16/2015 17:00
    3,8/15/2015 4:00,8/15/2015 11:00
    3,8/16/2015 9:00,8/16/2015 19:00
    3,8/17/2015,8/17/2015 17:00
    3,,
    4,,
    4,8/16/2015 6:00,8/16/2015 20:00

    最佳答案

    DF <- read.table(text = "Id,In,Out
    1,8/15/2015 8:00,8/15/2015 17:00
    1,8/16/2015 8:04,8/16/2015
    1,8/17/2015 8:50,8/17/2015 18:00
    1,8/18/2015,8/18/2015 17:00
    2,8/15/2015,8/15/2015 13:00
    2,8/16/2015 8:00,8/16/2015 17:00
    3,8/15/2015 4:00,8/15/2015 11:00
    3,8/16/2015 9:00,8/16/2015 19:00
    3,8/17/2015,8/17/2015 17:00", header = TRUE, sep = ",",
    stringsAsFactors = FALSE) #set this option during import


    DF$In[nchar(DF$In) < 13] <- paste(DF$In[nchar(DF$In) < 13], "0:00")
    DF$Out[nchar(DF$Out) < 13] <- paste(DF$Out[nchar(DF$Out) < 13], "0:00")

    DF$In <- as.POSIXct(DF$In, format = "%m/%d/%Y %H:%M", tz = "GMT")
    DF$Out <- as.POSIXct(DF$Out, format = "%m/%d/%Y %H:%M", tz = "GMT")
    # Id In Out
    #1 1 2015-08-15 08:00:00 2015-08-15 17:00:00
    #2 1 2015-08-16 08:04:00 2015-08-16 00:00:00
    #3 1 2015-08-17 08:50:00 2015-08-17 18:00:00
    #4 1 2015-08-18 00:00:00 2015-08-18 17:00:00
    #5 2 2015-08-15 00:00:00 2015-08-15 13:00:00
    #6 2 2015-08-16 08:00:00 2015-08-16 17:00:00
    #7 3 2015-08-15 04:00:00 2015-08-15 11:00:00
    #8 3 2015-08-16 09:00:00 2015-08-16 19:00:00
    #9 3 2015-08-17 00:00:00 2015-08-17 17:00:00
    na.omit不适用于 POSIXlt对象,因为它被记录为“处理包含向量和矩阵的向量、矩阵和数据框(仅)”。 (见 help("na.omit"))。而在严格意义上, POSIXlt对象不是向量:
    unclass(as.POSIXlt(DF$In))
    #$sec
    #[1] 0 0 0 0 0 0 0 0 0
    #
    #$min
    #[1] 0 4 50 0 0 0 0 0 0
    #
    #$hour
    #[1] 8 8 8 0 0 8 4 9 0
    #
    #$mday
    #[1] 15 16 17 18 15 16 15 16 17
    #
    #$mon
    #[1] 7 7 7 7 7 7 7 7 7
    #
    #$year
    #[1] 115 115 115 115 115 115 115 115 115
    #
    #$wday
    #[1] 6 0 1 2 6 0 6 0 1
    #
    #$yday
    #[1] 226 227 228 229 226 227 226 227 228
    #
    #$isdst
    #[1] 0 0 0 0 0 0 0 0 0
    #
    #attr(,"tzone")
    #[1] "GMT"

    几乎没有任何理由更喜欢 POSIXltPOSIXct (这是一个整数,给出自内部起源以来的秒数,因此需要更少的内存)。

    关于r - 当某些部分为空时如何转换日期或日期时间字段; na.omit 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33813081/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com