4

Rのベクトルに関して非常に基本的な質問があります。空のベクトルを作成し、それに日付を追加したいと思います。ただし、Rは日付を「数値」に変換します。

library(lubridate)
a <- c()
a <- c(a,now())
class(a)

結果は

[1] "numeric"

その間、このコードは私が望むことを正確に実行します:

  a <- c(now())
  a <- c(a,now())
  class(a)

つまり、クラスは現在正しいです:

[1]「POSIXct」「POSIXt」

問題は、ベクトルを日付で初期化したくない、つまり最初は空にしたいということです。

私はlistを使用してから、それを「リストから外す」ことを試みました(max()のような関数の引数としてこれらの日付を渡したいため)が、数値も表示されます。

a  <- list()
a[[1]] <- now()
a[[2]] <- now()
class(unlist(a))

使用arrayしても役に立ちません。

したがって、私は少し立ち往生しています。rのベクトルの出力タイプに関するドキュメントを読みましたが、解決策が見つかりませんでした。日付の空のベクトルを作成し、いくつかの日付を追加して、最後に日付を取得するにはどうすればよいですか?ありがとうございました。

4

3 に答える 3

6

使用するときc()は、ベクトルを初期化するのではなく、NULL値を作成することに注意してください。vector()クラスを操作できるベクトルを開始するには、を使用する必要があります。

> identical(c(),NULL)
[1] TRUE
> identical(c(),vector())
[1] FALSE

その次に、タイムゾーンが含まれていない限り、@jubaのソリューションは問題ありません。ある場合は、次のようになります。

> a <- vector()
> class(a) <- 'POSIXct'
> b <- as.POSIXct(as.character(Sys.time()),tz="GMT")
> b
[1] "2013-01-29 14:10:32 GMT"
> c(a,b)
[1] "2013-01-29 15:10:32 CET"

これを回避するには、次のように属性をコピーすることをお勧めします。

> attributes(X) <- attributes(b)
> a <- vector()
> b <- as.POSIXct(as.character(Sys.time()),tz="GMT")
> X <- c(a,b)
> attributes(X) <- attributes(b)
> X
[1] "2013-01-29 14:10:32 GMT"

しかし、いずれにせよ、ベクトルの追加は非常に遅いプロセスであり、問​​題が発生する可能性があるという単純な理由から、これをまったく考慮する必要はありません。ベクトルに100の日付を保存する必要がある場合は、Paul Hiemstraが提案したように、lapply / sapplyソリューションを使用するか、次のようにベクトルを開始することをお勧めします。

> a <- vector("numeric",100)
> class(a) <- c('POSIXct','POSIXt')

また

> a <- vector("numeric",100)
> attributes(a) <- list(class=c("POSIXct","POSIXt"),tzone="CET")
于 2013-01-29T13:11:43.660 に答える
2

あなたはこれを試すことができます:

library(lubridate)
a <- vector()
class(a) <- "POSIXct"
a <- c(a, now())
class(a)
[1] "POSIXct" "POSIXt" 
于 2013-01-29T12:53:21.380 に答える
1

通常、空のベクトルから始める必要はありません。次のような日付のベクトルを作成できます。

date_vec = lapply(1:10, function(x) return(Sys.time()))
> date_vec                                                                  
[[1]]                                                                       
[1] "2013-01-29 13:53:29 CET"                                               

[[2]]                                                                       
[1] "2013-01-29 13:53:29 CET"                                               

[[3]]                                                                       
[1] "2013-01-29 13:53:29 CET"                                               

[[4]]                                                                       
[1] "2013-01-29 13:53:29 CET"                                               

[[5]]
[1] "2013-01-29 13:53:29 CET"

[[6]]
[1] "2013-01-29 13:53:29 CET"

[[7]]
[1] "2013-01-29 13:53:29 CET"

[[8]]
[1] "2013-01-29 13:53:29 CET"

[[9]]
[1] "2013-01-29 13:53:29 CET"

[[10]]
[1] "2013-01-29 13:53:29 CET"

または、を使用して日付を表す文字列から日付のベクトルを作成することがよくありますstrptime

于 2013-01-29T12:53:46.590 に答える