我是 R 和編程方面的新手。我有一列包含日期串列。有些是“2020 年 1 月 1 日”格式,有些只有月份和年份(即僅“2020 年 1 月”)。我想將它們變異到一個新欄位,在那里我在所有采用月年格式的日期前添加一個 01,然后我將使用 lubridate 將其處理為日期
這是我試過的。我正在嘗試提取日期列的第一個字符。如果它是大寫字母,那么我將在其后附加“01”。我正在使用包含 dplyr 的 tinyverse 包
df %>% mutate(new_date = ifelse(str_sub(Date, start = 1, end = 1)== "[:upper:]"), paste('01', Date, sep = ' '), new_date = Date)
我收到錯誤訊息“沒有丟失”,但我認為我已包含new_date = Date以保持當前格式。
感謝您的幫助!
uj5u.com熱心網友回復:
這可以通過多種方式完成。
base R 使用前瞻和反向參考:
sub("(^)(?=[A-Za-z] )", "\\101 ", date, perl = TRUE)
[1] "01 January 2020" "01 January 2020" "12 February 1999" "01 March 2033"
base R 僅使用反向參考:
sub("(^[A-Za-z] )", "01 \\1", date, perl = TRUE)
dplyr并stringr使用相同的邏輯:
library(dplyr)
library(stringr)
data.frame(date) %>%
mutate(date = str_replace(date, "(^)(?=[A-Za-z] )", "\\101 "))
如果你堅持使用ifelse:
library(dplyr)
library(stringr)
data.frame(date) %>%
mutate(date = ifelse(str_detect(date, "^[:upper:]"),
sub("^", "01 ", date),
date))
資料:
date <- c("01 January 2020","January 2020", "12 February 1999", "March 2033")
uj5u.com熱心網友回復:
這是一個非正則運算式選項,我們將其轉換為Date類format
library(parsedate)
format(parse_date(date), '%d %B %Y')
[1] "01 January 2020" "01 January 2020" "12 February 1999" "01 March 2033"
資料
date <- c("01 January 2020","January 2020", "12 February 1999", "March 2033")
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/369994.html
