2016-05-18 6 views
0

データフレームdfには、特定の数の列があります。そのうちの1つ、tsは、タイムスタンプ:数値をdatetime/timestampに関連付けます。

1462147403122 1462147412990 1462147388224 1462147415651 1462147397069 1462147392497 ... 1463529545634 1463529558639 1463529556798 1463529558788 1463529564627 1463529557370です。あなたは私のデータフレームは、いくつかの日accrossデータが含まれて見ることができるように

"2016-05-02 02:03:23 CEST" "2016-05-02 02:03:32 CEST" "2016-05-02 02:03:08 CEST" "2016-05-02 02:03:35 CEST" "2016-05-02 02:03:17 CEST" "2016-05-02 02:03:12 CEST" ... "2016-05-18 01:59:05 CEST" "2016-05-18 01:59:18 CEST" "2016-05-18 01:59:16 CEST" "2016-05-18 01:59:18 CEST" "2016-05-18 01:59:24 CEST" "2016-05-18 01:59:17 CEST"

私は私の処分でもdatetimeの列に対応する日時を持っています。 3つあるとしましょう。番号1,2または3を含む列を追加したいと思います。行が最初の日に属する場合は1、2日目の場合は2など...

ありがとう Clement

答えて

0

これを行う1つの方法は、以下に示すように、日付が変わるたびに経過する合計日数を記録することです。

# Fake data 
dat = data.frame(datetime = c(seq(as.POSIXct("2016-05-02 01:03:11"), 
            as.POSIXct("2016-05-05 01:03:11"), length.out=6), 
           seq(as.POSIXct("2016-05-09 01:09:11"), 
            as.POSIXct("2016-05-16 02:03:11"), length.out=4))) 
tz(dat$datetime) = "UTC" 

注意、あなたのdatetime列がas.POSIXctを使用して1に変換し、日時書式になっていない場合。今

、1日目

dat$day = c(1, cumsum(as.numeric(diff(as.Date(dat$datetime, tz="UTC")))) + 1) 

dat 
   datetime day 
1 2016-05-02 01:03:11 1 
2 2016-05-02 15:27:11 1 
3 2016-05-03 05:51:11 2 
4 2016-05-03 20:15:11 2 
5 2016-05-04 10:39:11 3 
6 2016-05-05 01:03:11 4 
7 2016-05-09 01:09:11 8 
8 2016-05-11 09:27:11 10 
9 2016-05-13 17:45:11 12 
10 2016-05-16 02:03:11 15 

としてシーケンスの最初の日を数え、日数で新しい列を作成し、私は避けるために、上記のコードでタイムゾーンを指定私の地方のタイムゾーンとUTCとの間の潜在的なサイレントシフトによってトリップされてしまいました。これまでにPOSIXctの日時を変換するときたとえば、UTCへの私のデフォルトのローカルタイムゾーン(「アメリカ/ Los_Angeles」)からサイレントシフトの点に注意してください。

# Fake data 
datetime = seq(as.POSIXct("2016-05-02 01:03:11"), as.POSIXct("2016-05-05 01:03:11"), length.out=6) 
tz(datetime) 
[1] "" 

date = as.Date(datetime) 
tz(date) 
[1] "UTC" 

data.frame(datetime, date) 
   datetime  date 
1 2016-05-02 01:03:11 2016-05-02 
2 2016-05-02 15:27:11 2016-05-02 
3 2016-05-03 05:51:11 2016-05-03 
4 2016-05-03 20:15:11 2016-05-04 # Note day is different due to timezone shift 
5 2016-05-04 10:39:11 2016-05-04 
6 2016-05-05 01:03:11 2016-05-05 
+0

をありがとう!それは私が持っていたものより2〜3倍速いです:)そしてよりエレガントな – galzra

関連する問題