我有一系列的日期似乎是自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")
我做错了导致五位数字类型值而不是日期对象?
答案 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,...)。