2014-11-21 14 views
15

Tôi muốn làm một vector rỗng của POSIXct để tôi có thể đặt một POSIXct trong đó:Làm thế nào để làm cho một vector rỗng của POSIXct

vec <- vector("POSIXct", 10) 
vec 
vec[1] <- "2014-10-27 18:11:36 PDT" 
vec 

Đó không hoạt động. Bất kỳ ý tưởng?

+5

Tôi là một fan hâm mộ của khởi tạo cho 'na',' as.POSIXct (đại diện (NA, 10)) ' – Gregor

+0

@Gregor - bạn muốn gửi đó như là một câu trả lời? Có một số mối quan tâm hợp lệ về tôi liên quan đến hoạt động toán học trên kết quả. –

Trả lời

16

Vì không có POSIX mode, bạn không thể khởi tạo một vector POSIXct với mình vector() (xem ?mode cho một danh sách tất cả các loại chế độ).

Nhưng chúng ta có thể sử dụng .POSIXct để tạo ra các vector từ một vector nhân vật.

(x <- .POSIXct(character(10))) ## the same as .POSIXct(vector("character", 10)) 
# [1] NA NA NA NA NA NA NA NA NA NA 
class(x) 
# [1] "POSIXct" "POSIXt" 

Cũng lưu ý rằng bạn cũng có thể sử dụng .POSIXct(integer(10)) cho một chiều dài 10 vector có nguồn gốc ngày-lần.

+1

Đây là điều tôi chưa bao giờ thử trước đây. Hấp dẫn! +1 – jazzurro

+0

Điều này gọn gàng, nhưng nó dựa trên một sự phân tích cú pháp phân tích trong '.POSIXct'. Đơn giản (và có thể rõ ràng hơn) sẽ là '.POSIXct (rep (NA, 10))' – user295691

+1

Phân tích cú pháp phân tích cú pháp? Không chắc chắn điều đó có nghĩa là gì, '.POSIXct()' chỉ sử dụng 'structure()'. Có rất nhiều cách. Bạn cũng có thể làm '.POSIXct (NA [1:10])' –

0

Khi tạo một vector POSIXct theo cách sau, loại cơ bản trở thành kép:

> times <- as.POSIXct(c("2015-09-18 09:01:05.984 CEST", "2015-09-18 10:01:10.984 CEST", "2015-09-18 10:21:20.584 CEST")) 
> typeof(times) 
[1] "double" 
> values <- c(5,6,7) 

Kết hợp các vector trên với một vector rỗng của POSIXct khởi tạo với nhân vật như các loại cơ bản, kết quả trong một character- POSIXct vector:

> tm1 <- c(.POSIXct(character(0)), times) 
> typeof(tm1) 
[1] "character" 

... mà không thể được vẽ trực tiếp:

> ggplot() + geom_line(aes(x=tm1, y=val), data=data.frame(tm1,val)) 
geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic? 

do đó tôi thích khởi vectơ POSIXct rỗng của tôi với đôi hoặc nguyên như các loại cơ bản:

> tm2 <- c(.POSIXct(double(0)), times) 
> typeof(tm2) 
[1] "double" 
> ggplot() + geom_line(aes(x=tm2, y=val), data=data.frame(tm2,val)) 

Simple POSIXct plot

> tm3 <- c(.POSIXct(integer(0)), times) 
> typeof(tm3) 
[1] "double" 
> ggplot() + geom_line(aes(x=tm3, y=val), data=data.frame(tm3,val)) 
#Same thing... 

Khi sử dụng đôi, vector cũng được khởi tạo với số ngày có hiệu lực (mà có thể hoặc có thể không thích hợp hơn):

> .POSIXct(character(10)) 
[1] NA NA NA NA NA NA NA NA NA NA 
> .POSIXct(double(10)) 
[1] "1970-01-01 01:00:00 CET" "1970-01-01 01:00:00 CET" "1970-01-01 01:00:00 CET" "1970-01-01 01:00:00 CET" "1970-01-01 01:00:00 CET" "1970-01-01 01:00:00 CET" 
[7] "1970-01-01 01:00:00 CET" "1970-01-01 01:00:00 CET" "1970-01-01 01:00:00 CET" "1970-01-01 01:00:00 CET" 
2

Tôi thường khởi tạo mọi thứ tới NA:

as.POSIXct(rep(NA, 10)) 

hoạt động tốt trong trường hợp này. Nó rõ ràng làm những gì xảy ra dưới mui xe trong câu trả lời của @ RichardScriven --- xem các bình luận ở đó để thảo luận lâu hơn.

Các vấn đề liên quan