r-as.POSIXct返回意外的NA(以前的解决方案不适用于我的情况)

时间:2019-04-21 17:38:17

标签: r datetime-conversion

我有一个包含228个观测值的数据集,并且指定“日期”的三列之一具有以下格式:1999年12月2日1999年11月4日1999年10月7日.... 我的目标是将其转换为以下格式:1999-12-02(yyyy-mm-dd)。为此,我使用“ as.POSIXct”函数,但对所有228个观测值都获得“ NA”。

我尝试了这段代码及其任何可能的变体(包括从与我类似的先前问题中得到的一些提示),例如“ as.Date”,“ strptime”等。


$file = 'https://drive.google.com/get_video_info?docid=1UVUPS8JzMOqYi9jCoUhXFYnB2MEqyOs2';

$curl = curl_init($file);

curl_setopt_array($curl , [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HEADER => true,
    CURLOPT_FRESH_CONNECT => true,
    CURLOPT_SSL_VERIFYPEER => true,

]);

// HERE WE GOT THE COOKIES
$data = curl_exec($curl);
preg_match_all('/^Set-Cookie:\s*([^;]*)/mi', $data, $result);
$cookies = $result[1][0];
$cookies = str_replace('DRIVE_STREAM=' , '' , $cookies);

// HERE WE GOT THE STREAMING URLS
$data = urldecode(urldecode($data));
$data = explode('|' , $data);
$data =  $data[4];
$urls = explode('&url=' , $data);

curl_close($curl);
////////////////

var_dump($urls);
var_dump($cookies);

正如我所说,我希望看到从“ 1999年12月2日”到“ 1999-12-02”的转换。相反,我得到了:

new_date <- as.POSIXct(ecb_result1$Date, format = "%Y-%m-%d")

有没有人可以帮助我了解问题出在哪里以及如何解决?

1 个答案:

答案 0 :(得分:1)

在这种情况下,as.Dateas.POSIXct的格式为"%e %B %Y"。但这取决于语言环境。在我的情况下,十月不会更改,因为我的语言环境是荷兰语。该格式预计十月而不是十月。您的情况也可能发生这种情况。我建议尝试使用lubridate的dmy函数。请参见下面的示例。

dates <- c("2 December 1999", "4 November 1999", "7 October 1999")

# goes wrong for my locale
as.Date(dates, "%e %B %Y") # as.Date
[1] "1999-12-02" "1999-11-04" NA

as.POSIXct(dates, format = "%e %B %Y") # as.POSIXct
[1] "1999-12-02 CET" "1999-11-04 CET" NA    

但是lubridate的dmy函数对我有用。

lubridate::dmy(dates)
[1] "1999-12-02" "1999-11-04" "1999-10-07"

或者弄乱Sys.setlocale也可以:

Sys.setlocale("LC_TIME", "English_United Kingdom")

as.POSIXct(dates, format = "%e %B %Y")
[1] "1999-12-02 CET"  "1999-11-04 CET"  "1999-10-07 CEST"