强制到R中的data.frame时从日期开始的时区squence POSIXct丢失
我想保留下面生成的数据序列的CET、CEST部分强制到R中的data.frame时从日期开始的时区squence POSIXct丢失,r,timezone,posixct,R,Timezone,Posixct,我想保留下面生成的数据序列的CET、CEST部分 seq(as.POSIXct("2018-10-01"), as.POSIXct("2018-10-02"), "hour") myvector <- seq(as.POSIXct("2018-10-01"), as.POSIXct("2018-10-02"), "hour") myvector mydf <- as.data.frame(myvector) 当我强制它使用data.frame时,它就会丢失。我不知道如何保存它,我尝
seq(as.POSIXct("2018-10-01"), as.POSIXct("2018-10-02"), "hour")
myvector <- seq(as.POSIXct("2018-10-01"), as.POSIXct("2018-10-02"), "hour")
myvector
mydf <- as.data.frame(myvector)
当我强制它使用data.frame时,它就会丢失。我不知道如何保存它,我尝试过以下方法:
attr(mydf$myvector,“tzone”)您需要在POSIXct
列上应用as.POSIXlt
,然后才能从中获取时区
#Extract timezone from POSIXct column of a dataframe
mydf$timezone <- attr(as.POSIXlt(mydf$myvector), "tzone")[1]
head(mydf)
# myvector timezone
#1 2018-10-01 00:00:00 Europe/Berlin
#2 2018-10-01 01:00:00 Europe/Berlin
#3 2018-10-01 02:00:00 Europe/Berlin
#4 2018-10-01 03:00:00 Europe/Berlin
#5 2018-10-01 04:00:00 Europe/Berlin
#6 2018-10-01 05:00:00 Europe/Berlin
它没有丢失-head(mydf$myvector)
Ups,没错。谢谢我怎样才能访问POSIXct的那个部分?(除了强制字符串和提取相应的部分外)我尝试了attr()和“tz”“tzone”“timezone”,但没有成功。感谢使用属性(mydf$myvector)
我刚刚得到:$class[1]“POSIXct”“POSIXt”$tzone[1]”
我想在数据帧中附加一个新列,还是在同一列下保持它的可视性。类似这样的mydf$timezone Hi@Prem,谢谢你的回答。我可以看到,当使用head(mydf$myvector)
时,良好的值被打印出来(例如“2018-04-01 00:00:00 CEST”
。但是,当我尝试访问tz属性时,它是空的:属性(mydf$myvector)
给出$class[1]“POSIXct”“POSIXt”$tzone[1]”
Hi Prem,再次感谢。如果在为序列选择的时间段内没有夏时制修改,则您的解决方案有效。在欧洲,2018年3月25日发生了时间更改,tzone从CET(中央欧洲时间)移动到(中央夏季欧洲时间).关于如何解决这个问题有什么想法吗?myvector您想只使用CET
还是CEST
呢?欧洲/柏林怎么样?否则唯一的可能性似乎是使用字符日期的子字符串(见更新的答案)。是的,我希望在数据集中有CET/CEST列。您的解决方案似乎工作得很好。您能解释一下^.*\\s
表达式吗?它是否表示“第二个空格之前的所有内容(包括在内)?很高兴它有所帮助!^.*\\s
表示从一开始(^
)的所有内容(^
)直到最后一次出现空格(\\s
)(有关更多信息,请参阅)。
#Extract timezone from POSIXct column of a dataframe
mydf$timezone <- attr(as.POSIXlt(mydf$myvector), "tzone")[1]
head(mydf)
# myvector timezone
#1 2018-10-01 00:00:00 Europe/Berlin
#2 2018-10-01 01:00:00 Europe/Berlin
#3 2018-10-01 02:00:00 Europe/Berlin
#4 2018-10-01 03:00:00 Europe/Berlin
#5 2018-10-01 04:00:00 Europe/Berlin
#6 2018-10-01 05:00:00 Europe/Berlin
myvector <- seq(as.POSIXct("2018-10-01"), as.POSIXct("2018-10-02"), "hour")
head(myvector)
#[1] "2018-10-01 00:00:00 CEST" "2018-10-01 01:00:00 CEST" "2018-10-01 02:00:00 CEST"
#[4] "2018-10-01 03:00:00 CEST" "2018-10-01 04:00:00 CEST" "2018-10-01 05:00:00 CEST"
mydf <- as.data.frame(myvector)
head(mydf$myvector)
#[1] "2018-10-01 00:00:00 CEST" "2018-10-01 01:00:00 CEST" "2018-10-01 02:00:00 CEST"
#[4] "2018-10-01 03:00:00 CEST" "2018-10-01 04:00:00 CEST" "2018-10-01 05:00:00 CEST"
mydf$timezone <- gsub("^.*\\s", "", format(mydf$myvector, usetz = TRUE))
head(mydf)
# myvector timezone
#1 2018-10-01 00:00:00 CEST
#2 2018-10-01 01:00:00 CEST
#3 2018-10-01 02:00:00 CEST
#4 2018-10-01 03:00:00 CEST
#5 2018-10-01 04:00:00 CEST
#6 2018-10-01 05:00:00 CEST