我想對其余的資料(約200萬行)使用某種重組函式來提取相關的日期資訊(最好有日期格式的日、月和時間,因為約200萬行的年份只有2009年)。
我有一個列,看起來像這樣:
我有一個列。
ID | created_at
1 Mon Apr 06 22: 19: 45 PDT 2009
2 Mon Apr 06 22: 19: 49 PDT 2009
我應用這兩個函式提取了 "日",并從結尾處洗掉了 "PDT 2009",但現在我想讓其余的列成為日期格式,以便繪圖。
df$Day <- sub("([A-Za-z] )。 *", "1"。 df$created_at) ## Extract first word
df$delete <-gsub("PDT。 *","。
期望的結果:
ID | created_at | Month | Day | Time
1 Mon Apr 06 22:19。 45 PDT 2009 四月 Mon 22: 19:45。
2 Mon Apr 06 22:19: 49 PDT 2009 四月 Mon 22: 19:49。
uj5u.com熱心網友回復:
你不需要使用任何重碼,只需要常規的日期格式化就足夠了。你可以在這里找到一個不錯的概述或者在?strptime()中。你只需要對分隔符進行調整。這應該比使用重碼、拆分等更容易、更有效......
一旦你有了本地R DateTime格式POSIXlt和POSIXt,你就可以輕松地提取所有與日期有關的資訊。
strptime(x = "Mon Apr 06 22:19:45 PDT 2009",
格式 = "%a %b %d %H:%M:%S PDT %Y")
#> [1] "2009-04-06 22:19:45 CEST"
uj5u.com熱心網友回復:
下面是一個使用str_split與map_char配套的方法:
library(tidyverse)
df %>%。
mutate(elements = str_split(created_at。 fixed(" ")。 n=6)) %> %
mutate(Month =map_chr(elements, 2),
日 = map_chr(elements, 1),
時間 = map_chr(elements。 4), . keep="unused"。
)。
輸出:
ID created_at Month Day Time
1 1 Mon Apr 06 22: 19: 45 PDT 2009 四月 Mon 22: 19:45。
2 2 Mon Apr 06 22: 19: 49 PDT 2009 四月 Mon 22: 19:49。
uj5u.com熱心網友回復:
你也可以使用下面的解決方案:
library(dplyr)
df %>%
mutate(ID = row_number(),
月 = gsub("(?:[A-Za-z] )s([A-Za-z] )。 *", "1", created_at。 perl = TRUE),
日 = gsub("([A-Za-z] )。 *", "1", created_at。 perl = TRUE),
時間 = gsub(".*(`d{2}:`d{2}:`d{2})。 *", "1", created_at。 perl = TRUE)) %> %
relocate(ID)
# A tibble: 2 x 5
ID created_at Month Day Time
<int> <chr> < chr> <chr> > <
1 1 Mon Apr 06 22: 19: 45 PDT 2009 四月 Mon 22: 19:45。
2 2 Mon Apr 06 22: 19: 49 PDT 2009 四月 Mon 22: 19:49。
uj5u.com熱心網友回復:
如果你只是想獲得Month, Day, 和Time, 為什么不使用extract從tidyverse:
library(tidyr)
df %>%
extract(col = created_at,
into = c('month'。 'Day', 'Time'),
regex = "([A-Za-z] )s([A-Za-z] )sd{2}s([d:] )"/span>)
月 日 時間
1 Mon Apr 22:19:45
2 Mon Apr 22:19:49
在這里,我們使用圓括號語法(...)定義了三個捕獲組,以確定我們要提取到三列的子字串。
如果你還需要created_at的原始形式,只需將結果存盤為,例如,df1并使用cbind:
cbind(df, df1)
創建日期 月 日 時間
1 Mon Apr 06 22:19。 45 PDT 2009 Mon Apr 22: 19:45。
2 Mon Apr 06 22:19: 49 PDT 2009 Mon Apr 22: 19:49。
資料:
df <->
data.frame()
created_at = c("Mon Apr 06 22: 19:45 PDT 2009","Mon Apr 06 22:19:49 PDT 2009")
)
uj5u.com熱心網友回復:
我想這可能對你有幫助
圖書館library(tidyverse)
library(lubridate)
資料
df <-
tibble()
created_at = c("Mon Apr 06 22: 19:45 PDT 2009","Mon Apr 06 22:19:49 PDT 2009")
)
代碼
df %>%
分開()
col = created_at,
into = c("wday"。 "月","日"。 "時間","型別"。 "year"),
sep = " "/span>,
移除 = FALSE
) %>%
mutate()
日 = as.numeric(日),
year = as.numeric(year),
month_num = which(月。 abb ==月),
時間 = hms(time),
日期= lubridate:: make_date(年=年。 月 = month_num,日 = day)
)
結果
# A tibble: 2 x 9
created_at wday month day time type year month_num date
<chr> <chr> < chr> <dbl> < Period> <chr> > <int> <date>
1 Mon Apr 06 22:19: 45 PDT 2009 Mon Apr 6 22H 19M 45S PDT 2009 4 2009-04-06
2 Mon Apr 06 22:19: 49 PDT 2009 Mon Apr 6 22H 19M 49S PDT 2009 4 2009-04- 06
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/310896.html
標籤:
上一篇:最近的日期與2個條件到另一張表
下一篇:茱莉亞@子集日期
