【问题标题】:Dates from similar columns in Excel are imported differently in R. How can I get the desired date format: %d-%m-%Y?Excel 中类似列的日期在 R 中的导入方式不同。如何获得所需的日期格式:%d-%m-%Y?
【发布时间】:2023-01-13 23:36:49
【问题描述】:

我的问题已在 Stackoverflow 中被反复询问和回答,但似乎没有一个解决方案对我有用。能否请你帮忙?这是我使用 dput 的数据示例。 dput(sample_n(CA_Complication, 20))

structure(list(ID = c("101", "101", "101", "101", "101", "101", 
"101", "101", "101", "101", "101", "101", "101", "101", "101", 
"101", "101", "101", "101", "101"), AD = c("447", "243", "608", 
"537", "1588", "302", "28", "1035", "755", "8", "1262", "95", 
"1954", "231", "88", "1898", "1028", "669", "103", "773"), Date1 = structure(c(1367802000, 
1324515600, 1404781200, 1391043600, 1621299600, 1340067600, 1291078800, 
1489453200, 1456966800, 1278986400, 1544058000, 1295398800, 1637629200, 
1321318800, 1293411600, 1623286800, 1485392400, 1417050000, 1296522000, 
1431997200), tzone = "UTC", class = c("POSIXct", "POSIXt")), 
    Date2 = c("41400.041666666701", "40913.041666666701", 
    "41828.041666666701", "41697.041666666701", "44334.041666666701", 
    "41080.041666666701", "40512.041666666701", "42901.041666666701", 
    "42443.041666666701", "40372.041666666701", "43535.041666666701", 
    "40197.041666666701", "44523.041666666701", "40862.041666666701", 
    "40539.041666666701", "44357.041666666701", "42817.041666666701", 
    "42016.041666666701", "40575.041666666701", "42143.041666666701"
    ), procedure = c("CH-0447", "CH-0243", "CH-0608", 
    "CH-0537", "CH-1588", "CH-0302", "CH-0028", 
    "CH-1035", "CH-0755", "CH-0008", "CH-1262", 
    "CH-0095", "CH-1954", "CH-0231", "CH-0088", 
    "CH-1898", "CH-1028", "CH-0669", "CH-0103", 
    "CH-0773"), PAT = c("101-447", "101-243", "101-608", 
    "101-537", "101-1588", "101-302", "101-28", "101-1035", "101-755", 
    "101-8", "101-1262", "101-95", "101-1954", "101-231", "101-88", 
    "101-1898", "101-1028", "101-669", "101-103", "101-773"), 
    LOMP17 = c(NA, NA, NA, NA, 309015, NA, NA, 409030, NA, NA, 
    209015, NA, 209005, NA, NA, 209005, NA, NA, NA, NA), LOMP = c(30055, 
    140020, 60020, 10005, NA, 90005, 30005, NA, 10005, NA, NA, 
    10005, NA, 30005, 20005, NA, NA, 10005, 30060, 100010)), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -20L))

       

如您所见,有两个日期列在 excel 中看起来相似(两者的单元格格式均为 date: *14-03-2012。但是,当我在 R 中打开文件时,Date1 的类型为 Dttm,而 Date2 为字符。我可以得到我想要的使用以下代码的日期 1 的日期格式:

library("anytime")  
anydate(mydata$Date1)     #yeilds date as yyyy-mm-dd,hh:mm:ss
mydata$Date1 <- substring(mydata$Date1,1,10)     # Remove hh:mm:ss
mydata$Date1 <- format(as.Date(mydata$Date1,'%Y-%m-%d'),'%d-%m-%Y')
class(mydata$Date1)       #character

但是我无法获得所需格式的第二个 Date 列。如果我使用上面的代码,它会引入许多 NA。我还使用了此代码 openxlsx::convertToDateTime(mydata$Date2) 导致以下错误:NAs introduced by coercion

然后我尝试了这个:

library(tibble)
library(janitor)
excel_numeric_to_date(as.numeric(as.character(mydata$Date2), date_system = "modern"))

这导致了这个警告信息:

In excel_numeric_to_date(as.numeric(as.character(mydata$Date2),  :
NAs introduced by coercion

我也试过这个:

library("datetimeutils")
convert_date(mydata$Date2, type = "Excel")
Error in charToDate(x) : 
character string is not in a standard unambiguous format

有人可以帮我吗?

【问题讨论】:

  • 这回答了你的问题了吗? How to convert Excel date format to proper date in R
  • 关键是先转换为数字,例如as.Date(as.numeric(df$Date2), origin = "1899-12-30")
  • @AndreWildberg 这是我收到的警告:强制引入的 NA。我刚刚意识到只有当日期等于 09-09-1809 时才会引入 NA。在此数据集中,似乎如果日期未知,则使用 09-09-1809,不幸的是我无法更改它。
  • 您能否将失败的行之一包含到您的示例中?
  • @AndreWildberg 我将 dput 从 10 更新为 20。在 Date2 中,第 16 个和第 20 个值等于 09-09-1809。但对我来说,这里提供的数字并不清楚。我希望它有所帮助。

标签: r excel date lubridate posixct


【解决方案1】:

您在这里遇到了括号问题和as.character。以下是否有效? excel_numeric_to_date(as.numeric(mydata$Date2), date_system = "modern")

我没有收到错误: as.POSIXct(as.numeric(t$Date2),origin = '1970-01-01 00:00.00 UTC') 但我不知道正确的来源。

【讨论】:

    猜你喜欢
    • 2013-02-10
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 2012-07-21
    • 1970-01-01
    • 2015-10-26
    • 2018-05-25
    相关资源
    最近更新 更多