gpt4 book ai didi

r - 将 apply 函数与 data.table 一起使用,为什么这么慢?

转载 作者:行者123 更新时间:2023-12-04 02:47:52 27 4
gpt4 key购买 nike

我正在使用 data.table 包,我使用了这个:

dt$date<- as.POSIXct(dt$date, tz="GMT")      (I know I can use fastPOSIXct)
2009-08-07 06:00:14
2009-08-07 06:00:15
2009-08-07 06:00:16
2009-08-07 06:00:24

我想更改时区(有很多)并提取小时。假设我想使用 apply 函数:

f <- function(x) {
SydneyTime<-format(x["date"], format = "%Y-%m-%d %H:%M:%OS", tz = "Australia/Sydney")
Sy<-hour(SydneyTime)
return(Sy)
}

mydata$SyHour <- apply(dt, 1, f)

这太慢了,我是不是错过了什么?我不想保留 SydneyTime 的副本。

谢谢。

最佳答案

您无需复制任何内容。 format.Date 已矢量化,因此您可以使用 := 使用原始列中的数据在 data.table 中创建一个新列。这是一个可重现的小例子:

require( data.table )
# Seconds in the day
n <- 86400

# Make some data
DT <- data.table( Date = as.POSIXct( Sys.time()+seq(0,2*n,by=n) , tz = "GMT") )
# Date
#1: 2013-08-28 21:17:10
#2: 2013-08-29 21:17:10
#3: 2013-08-30 21:17:10

# Change the TZ
DT[ , Date2:=format( Date , tz = "Australia/Sydney")]
# Date Date2
#1: 2013-08-28 21:17:10 2013-08-29 06:17:10
#2: 2013-08-29 21:17:10 2013-08-30 06:17:10
#3: 2013-08-30 21:17:10 2013-08-31 06:17:10

编辑下面的评论

lapply 旨在与 data.table 按列使用。要就地修改列 Date,您可以这样做:

DT[ , lapply( .SD , format , tz = "Australia/Sydney" ) ]

但在将其用于您的真实数据之前,请检查 .SD.SDcols 的含义。

关于r - 将 apply 函数与 data.table 一起使用,为什么这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18497095/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com