带前导 X 字符的截止日期字符串
String to Date with leading X character
我正在尝试将 Date
列转换为日期格式,但我一直收到错误消息。我认为问题可能是日期是一个字符并且在年份之前有一个 X:
HMC.Close Date
1 39.71 X2007.01.03
2 40.04 X2007.01.04
3 38.67 X2007.01.05
4 38.89 X2007.01.08
5 38.91 X2007.01.09
6 37.94 X2007.01.10
这是我用过的代码运行:
stock_honda <- expand.grid("HMC" = HMC$HMC.Close) %>%
"Date" = as.Date(row.names(as.data.frame(HMC))) %>%
subset(Date >"2021-02-28" & Date < "2022-03-11")
Error in charToDate(x) :
character string is not in a standard unambiguous format
您可以使用 gsub
首先删除导致问题的“X”,然后使用 lubridate
包中的 ymd
将字符串转换为日期。此外,您可以使用 dplyr
包中的 mutate(across(...))
进行转换,以完成 tidyverse-way.
中的所有操作
library(dplyr)
library(lubridate)
df |>
# Mutate Date to remove X and convert it to Date
mutate(across(Date, function(x){
ymd(gsub("X","", x))
}))
# HMC.Close Date
#1 39.71 2007-01-03
#2 40.04 2007-01-04
#3 38.67 2007-01-05
#4 38.89 2007-01-08
#5 38.91 2007-01-09
#6 37.94 2007-01-10
这是一个避免首先在日期前添加“X”的管道:
library(quantmod)
getSymbols(c("FCAU.VI", "TYO", "VWAGY", "HMC"), na.rm = TRUE)
library(tidyverse)
stock_honda <- (HMC
%>% as.data.frame()
%>% rownames_to_column("Date")
%>% select(Date, HMC.Close)
%>% mutate(across(Date, lubridate::ymd))
%>% filter(between(Date, as.Date("2021-02-28"), as.Date("2022-03-11")))
)
如果 between
有一个版本可以避免显式转换为日期,那就太好了。 (filter("2021-02-28" < Date, Date < "2022-03-11")
也适用于最后一步。)
我正在尝试将 Date
列转换为日期格式,但我一直收到错误消息。我认为问题可能是日期是一个字符并且在年份之前有一个 X:
HMC.Close Date
1 39.71 X2007.01.03
2 40.04 X2007.01.04
3 38.67 X2007.01.05
4 38.89 X2007.01.08
5 38.91 X2007.01.09
6 37.94 X2007.01.10
这是我用过的代码运行:
stock_honda <- expand.grid("HMC" = HMC$HMC.Close) %>%
"Date" = as.Date(row.names(as.data.frame(HMC))) %>%
subset(Date >"2021-02-28" & Date < "2022-03-11")
Error in charToDate(x) : character string is not in a standard unambiguous format
您可以使用 gsub
首先删除导致问题的“X”,然后使用 lubridate
包中的 ymd
将字符串转换为日期。此外,您可以使用 dplyr
包中的 mutate(across(...))
进行转换,以完成 tidyverse-way.
library(dplyr)
library(lubridate)
df |>
# Mutate Date to remove X and convert it to Date
mutate(across(Date, function(x){
ymd(gsub("X","", x))
}))
# HMC.Close Date
#1 39.71 2007-01-03
#2 40.04 2007-01-04
#3 38.67 2007-01-05
#4 38.89 2007-01-08
#5 38.91 2007-01-09
#6 37.94 2007-01-10
这是一个避免首先在日期前添加“X”的管道:
library(quantmod)
getSymbols(c("FCAU.VI", "TYO", "VWAGY", "HMC"), na.rm = TRUE)
library(tidyverse)
stock_honda <- (HMC
%>% as.data.frame()
%>% rownames_to_column("Date")
%>% select(Date, HMC.Close)
%>% mutate(across(Date, lubridate::ymd))
%>% filter(between(Date, as.Date("2021-02-28"), as.Date("2022-03-11")))
)
如果 between
有一个版本可以避免显式转换为日期,那就太好了。 (filter("2021-02-28" < Date, Date < "2022-03-11")
也适用于最后一步。)