簡體   English   中英

用於從R中的日期/時間字符串計算星期數的功能

[英]Function to calculate the day number of the week from the date/time string in R

我有一個函數如下:##函數從日期/時間字符串計算一周的日期編號

getDayOfWeek <- function(vector) {
    split1 <- strsplit(paste(vector), " ")
    dateIs <- as.POSIXlt(split1[[1]][1])
    print (dateIs$wday)
 }

但是此功能是基於2016-06-12 11:23:25.680Z格式編寫的,但我的數據是%m%d%y %h%m 如何更改函數中使用的原始日期時間的格式。 我想將此函數應用於我的數據框,以便根據附加列中的時間獲取星期名稱。

我在用

taxidata$weekday <-sapply(taxidata$tpep_pickup_datetime, FUN=getDayOfWeek)

我收到以下錯誤:

as.POSIXlt.character(split1 [[1]] [1])出錯:字符串不是標准的明確格式

我也用過:

taxidata$dayofweek <- weekdays(as.Date.POSIXct(taxidata$tpep_pickup_datetime, format="%m/%d/%y %H:%M"))
head(taxidata, n =3)

但是這個功能只給我四周的所有數據點。

鑒於例如

x <- "2016-06-12 11:23:25.680Z"
as.POSIXct(x, format = "%Y-%m-%d %H:%M:%S")
# [1] "2016-06-12 11:23:25 CEST"

要么

x <- "061216 1123"
as.POSIXct(x, format = "%m%d%y %H%M")
# [1] "2016-06-12 11:23:00 CEST"

?strptime告訴你

%u:工作日為十進制數(1-7,星期一為1)

所以你可以做到

format(as.POSIXct(x, format = "%m%d%y %H%M"), "%u")
# [1] "7"

字符串不是標准的明確格式

意味着例如2016-06-12可以解釋為6月12日或12月6日。 您應該指定格式。

你可以使用lubridate: t <- lubridate::ymd_hms("2016-06-12 11:23:25.680Z")
lubridate::wday(t, label = F, abbr = F) (= 1)或
lubridate::wday(t, label = T, abbr = T) (= Sun)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM