我正在解決需要合并兩個資料集的問題。第一個資料集來自 SQL 并使用 RODBC 庫匯入,而第二個資料集從 Excel 匯入。我想按月和年合并兩個資料框,但是為了做到這一點,我需要將第一個 DF 的日期列從年月日轉換為年月。
我曾嘗試使用as.Date(df$postingdate, format = '%Y %M'或strftime(df$postingdate,"%Y %m") 像往常一樣,但是第一個不起作用,第二個將列更改為字符。這幾天一直有問題,我嘗試了很多東西,主要來自以下鏈接的建議:[https://stackoverflow.com/questions/6242955/converting-year-and-month-yyyy-mm-format -至今][1]
在底部,我從使用 `dput()′ (df2) 時得到的輸出創建了一個 df,我注意到在發布日期下,資料被轉換為數字,而不是實際日期(“2020-05-28 ”、“2020-10-09”、“2021-10-19”)。因此,我也不確定我有什么問題,因為我使用了錯誤的函式,或者因為資料是“未知”資料型別。
我想將日期轉換為年 - 月的第一個資料集示例:
df <- data.frame(
Posting_Date = c("2020-05-28", "2020-10-09", "2021-10-19"), Sales = c(2702.5, 369, 4134),
Sales_person_code = c(6L, 10L, 10L), EDI = c(1L, 1L, 1L),
City = c(141L, 4L, 6L), K?de = c(12L, 12L, 12L),
Vinter = c(0, 0, 0), For?r = c(1, 0, 0), Sommer = c(0, 0, 0),
Efter?r = c(0, 1, 1), Fredag = c(0, 1, 0), L?rdag = c(0, 0, 0),
Mandag = c(0, 0, 0), Onsdag = c(0, 0, 0), S?ndag = c(0, 0, 0),
Tirsdag = c(0, 0, 1), Torsdag = c(1, 0, 0),
year_month = c("2020-05-28", "2020-10-09", "2021-10-19"))
df2 <- data.frame(
Posting_Date = c(18410, 18544, 18919), Sales = c(2702.5, 369, 4134),
Sales_person_code = c(6L, 10L, 10L),EDI = c(1L, 1L, 1L),
City = c(141L, 4L, 6L), K?de = c(12L, 12L, 12L),
Vinter = c(0, 0, 0), For?r = c(1, 0, 0), Sommer = c(0, 0, 0),
Efter?r = c(0, 1, 1), Fredag = c(0, 1, 0), L?rdag = c(0, 0, 0),
Mandag = c(0, 0, 0), Onsdag = c(0, 0, 0), S?ndag = c(0, 0, 0),
Tirsdag = c(0, 0, 1), Torsdag = c(1, 0, 0),
year_month = c(18410, 18544, 18919))
在此先感謝您的幫助。請讓我知道我是否可以做任何事情來幫助你們,幫助我
uj5u.com熱心網友回復:
在前面,您的嘗試as.Date(df$Posting_Date, format="%Y %m")似乎是倒退:該函式as.Date用于從字串轉換為Date-class,它的format=引數是確定如何找到字串的年/月/日組件,而不是您以后希望如何轉換它. (請注意,在 R 中,aDate顯示為YYYY-MM-DD.Always。告訴 R 你想要一個日期只是年/月是說你想把它轉換成一個字串,不再像日期或數字一樣。lubridate也許其他包允許您擁有相似Date物件。)
對于df,可以只對字串進行子集化,而無需決議為Date-class:
substring(df$Posting_Date, 1, 7)
# [1] "2020-05" "2020-10" "2021-10"
如果你想對它們做任何類似數字的事情,你可以先轉換為Date-class,然后使用format(.)轉換為具有特定格式的字串。
as.Date(df$Posting_Date)
# [1] "2020-05-28" "2020-10-09" "2021-10-19"
format(as.Date(df$Posting_Date), format = "%Y-%m")
# [1] "2020-05" "2020-10" "2021-10"
df2但是,對于,由于它是數字,因此您需要指定 anorigin=而不是 a format=。我推斷這些是基于紀元的,所以
as.Date(df2$Posting_Date, origin = "1970-01-01")
# [1] "2020-05-28" "2020-10-09" "2021-10-19"
format(as.Date(df2$Posting_Date, origin = "1970-01-01"), format = "%Y-%m")
# [1] "2020-05" "2020-10" "2021-10"
請注意,R在內部將Date(和POSIXct)存盤為數字:
dput(as.Date(df2$Posting_Date, origin = "1970-01-01"))
# structure(c(18410, 18544, 18919), class = "Date")
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/343670.html
