这是我从excel开始的示例数据(下次,我将向我的客户介绍有关整洁的数据):
date_string
3/13, 3/17, 3/20
4/13
5/12, 5/20
我非常接近我想要的东西:
library(tidyverse)
library(stringr)
data <- str_split_fixed(data$date_string, ",", 3)%>%
as_tibble() %>%
gather() %>%
filter(value != "")
然后我离开了这个:
key value
v1 3/13
v1 43203
v1 5/12
v2 3/17
v2 5/20
v3 3/20
这已经足够好了,我可以完成其余的格式化并安排在excel中,但我在R中做的越多越好,特别是当我下次更新时我必须再次这样做最终产品。我觉得有一个lubridate
函数可以帮助我解决这个问题,但mdy
和date
会一直回复错误。
我想要的值是上表,但是是m / d / y格式。
更新
根据以下答案,我添加了以下内容。这有效,但可能有一种更优雅的方式:
data <- str_split_fixed(data$date_string, ",", 3)%>%
as_tibble() %>%
gather() %>%
filter(value != "") %>%
mutate(value =
if_else(
str_detect(value, "/") == T,
paste0(value, "/2018"),
as.character(as_date(as.numeric(value), origin = "1900-01-01")))) %>%
mutate(value =
if_else(
str_detect(value, "/") == T,
mdy(value),
ymd(value)))
我收到这些警告,但数据是我想要的:
1. In as_date(as.numeric(value), origin = "1900-01-01") :
NAs introduced by coercion
2. 1 failed to parse.
3. 5 failed to parse.
不确定它是如何解析&#34;当最后的&#34;值&#34; column作为日期变量返回。 。 。
答案 0 :(得分:1)
以下是您可以做的事情:
首先,将年份添加到您的日期:
dates <- ("3/13", "4/17", "5/12", "3/17", "5/20", "3/20")
dates <- paste0(dates, "/18")
其次,转换它们指定格式(在你的情况下是m / d / y):
as.Date(dates, "%m/%d/%y")
[1] "2018-03-13" "2018-04-17" "2018-05-12" "2018-03-17" "2018-05-20" "2018-03-20"
答案 1 :(得分:1)
这是一种略有不同的方法:
library(tidyverse)
library(stringr)
library(lubridate)
data <- c(
"3/13, 3/17, 3/20",
"4/13",
"5/12, 5/20")
df <- tibble(date_string = data) %>%
mutate(date_string = str_split(date_string, ", ")) %>%
unnest() %>%
mutate(date_string = ymd(str_c("2018-", date_string)))
df