【问题标题】:How to delete certain dates in the data frame R如何删除数据框R中的某些日期
【发布时间】:2013-10-02 19:31:31
【问题描述】:

我有一个相当大的数据集 (1.295.897) 来自北海的水位。这是一个非常好的数据集,但从 1978 年到 1987 年,他们每小时测量一次水位,从 1988 年开始,他们每 10 分钟测量一次水位。我不需要每 10 分钟测量一次,所以我想每 10 分钟删除一次测量,除了在整点(例如 10:00、1:00)的测量。

这是我的数据从 1978 年到 1987 年的样子:

  posix                  waarde
1 1978-01-01 00:00:00     66
2 1978-01-01 01:00:00     51
3 1978-01-01 02:00:00     17
4 1978-01-01 03:00:00    -17
5 1978-01-01 04:00:00    -46
6 1978-01-01 05:00:00    -69

这就是我的数据集从 1988 年到 2010 年的样子:

        posix               waarde
1295892 2010-12-31 23:00:00    -73
1295893 2010-12-31 23:10:00    -71
1295894 2010-12-31 23:20:00    -68
1295895 2010-12-31 23:30:00    -64
1295896 2010-12-31 23:40:00    -59
1295897 2010-12-31 23:50:00    -53

我希望你能帮助我。

【问题讨论】:

    标签: r date dataframe dataset large-data


    【解决方案1】:

    请提供可重现的示例。但是如果你的变量实际上是一个 POSIX 类,那么:

    library(lubridate)
    dat[ minute(dat$posix)==0, ]
    

    lubridate 的美妙之处在于它为您处理细节:

    > test <- as.POSIXlt(Sys.time(), "GMT")
    > test
    [1] "2013-09-26 17:50:16 GMT"
    > minute(test)
    [1] 50
    

    如果您需要排除并非完全在小时到秒结束的事情:

    dat[ minute(dat$posix)==0 & second(dat$posix==0), ]
    

    您可能希望对第二部分进行一些舍入,因为还报告了小数秒:

    > second(test)
    [1] 16.54902
    

    【讨论】:

    • @Roland 查看编辑。我认为我的解决方案不容易受到秒数的影响。或者你的意思是,例如5:00:15 不应该算吗?我想我把这留给 OP 来澄清。
    • 根据我的经验,您希望找到那些不符合您期望的值,例如类似于5:00:15 的每小时(或 10 分钟)数据。
    猜你喜欢
    • 2022-08-05
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 1970-01-01
    相关资源
    最近更新 更多