Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
强制到R中的data.frame时从日期开始的时区squence POSIXct丢失_R_Timezone_Posixct - Fatal编程技术网

强制到R中的data.frame时从日期开始的时区squence POSIXct丢失

强制到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时,它就会丢失。我不知道如何保存它,我尝

我想保留下面生成的数据序列的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时,它就会丢失。我不知道如何保存它,我尝试过以下方法:


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