自R中的原点以来以秒为单位转换日期

时间:2015-08-24 16:20:44

标签: r date

我有一系列的日期似乎是自1960年1月1日以来在seoncds中定义的。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from django.test import LiveServerTestCase

class LiveNewVisitorTest(LiveServerTestCase):
    def setUp(self):
        self.browser = webdriver.Chrome()
        self.browser.implicitly_wait(3)

    def tearDown(self):
        self.browser.close()

    def test_can_start_a_list_and_retrieve_it_later(self):
        #self.browser.get('http://localhost:8000/lists')
        #self.browser.get('http://www.google.com')
        #lists_live_server_url = '%s%s' % (self.live_server_url, '/lists')
        #lists_live_server_url = '{0}{1}'.format(self.live_server_url, '/lists')
        lists_live_server_url = self.live_server_url
        self.browser.get(lists_live_server_url)

        self.assertIn('To-Do', self.browser.title)
        header_text = self.browser.find_element_by_tag_name('h1').text
        self.assertIn('To-Do', header_text)

(复制:)

'data.frame':   5 obs. of  1 variable:
$ original: int  1624086000 1624086000 1508137200 1508137200 1508137200

我想将这些格式转换为data <- as.data.frame(c(1624086000,1624086000,1508137200,1508137200,1508137200)) setnames(data, c("original")) 格式的日期。

我为此编写了以下代码:

%Y-%m-%d

结果是五位数字格式的日期:

uniqueDates <- as.data.frame(unique(data))

uniqueDates$converted <- sapply(uniqueDates$original, function(x) as.Date(as.POSIXct(x, origin="1960-01-01", tz = "GMT"), "GMT", "%Y-%m-%d"))

如果我只是跑

> str(uniqueDates$converted)
num [1:2] 15144 13802

我得到了理想的结果:

as.Date(as.POSIXct(1624086000, origin="1960-01-01", tz = "GMT"), "GMT", "%Y-%m-%d")

我做错了导致五位数字类型值而不是日期对象?

1 个答案:

答案 0 :(得分:1)

as.Date(as.POSIXct(data[,1], origin="1960-01-01", tz = "GMT"), "GMT", "%Y-%m-%d")
[1] "2011-06-19" "2011-06-19" "2007-10-16" "2007-10-16" "2007-10-16"

该功能已经过矢量化。不需要lapply功能。如果您有多列日期,请使用apply系列。如果你想避免使用长匿名函数,你可以先创建函数并以适用于你的情况的方式使用它:

as.ymd <- function(x) {
  as.Date(as.POSIXct(x, origin="1960-01-01", tz = "GMT"), "GMT", "%Y-%m-%d")
}

现在,对于单个向量或具有多个维度的数组,您可以转换这些情况的日期:

data2 <- data.frame(c(1624086000,1624086000,1508137200,1508137200,1508137200), c(1624086000,1624086000,1508137200,1508137200,1508137200))
setnames(data2, c("original", "second"))

as.ymd(data2[,1])
[1] "2011-06-19" "2011-06-19" "2007-10-16" "2007-10-16" "2007-10-16"

data2[] <- lapply(data2, as.ymd)
data2
    original     second
1 2011-06-19 2011-06-19
2 2011-06-19 2011-06-19
3 2007-10-16 2007-10-16
4 2007-10-16 2007-10-16
5 2007-10-16 2007-10-16

sapply的五位数字输出是由于其简化过程。日期正在转换为班级numeric。尝试将参数simplify=FALSE添加到您尝试进行比较的第一个函数中。

您可以使用strftime来处理它,因为它会输出类character的向量。使用sapply简化它不会有任何问题,但是你会留下字符串而不是所选的日期类(POSIXct,POSIXlt,Date,zoo,xts,...)。