繁体   English   中英

在 R 中将 chr 转换为日期格式

[英]Transform chr to date format in R

我想从 chr 转换为日期格式我有这个代表年 - 周:2020-53 我试过这样做

 mutate(semana=as_date(year_week,format="%Y-%U"))

但我在所有数据集中得到相同的日期 2020-01-18

我也试过

mutate(semana=strptime(year_week, "%Y-%U"))

得到相同的结果在这里你可以看到错误的转换在此处输入图像描述 有什么想法吗,谢谢

我想我有一些东西可以完成这项工作。

library(tidyverse)
library(lubridate)

# Set up table like example in post
trybble <- tibble(year_week = c("2020-53", rep("2021-01", 5)),
                  country = c("UK", "FR", "GER", "ITA", "SPA", "UK"))

# Function to go into mutate with given info of year and week
y_wsetter <- function(fixme, yeargoal, weekgoal) {
   lubridate::year(fixme) <- yeargoal
   lubridate::week(fixme) <- weekgoal
   return(fixme)
}

# Making a random date so col gets set right
rando <- make_datetime(year = 2021, month = 1, day = 1)

# Show time
trybble <- trybble %>% 
   add_column(semana = rando) %>%  # Set up col of dates to fix
   mutate(yerr = substr(year_week, 1, 4)) %>% # Get year as chr
   mutate(week = substr(year_week, 6, 7)) %>% # Get week as chr
   mutate(semana2 = y_wsetter(semana, 
                              as.numeric(yerr), 
                              as.numeric(week))) %>% # fixed dates
   select(-c(yerr, week, semana))

笔记:

  • 如果您以某种方式插入大于 53 的一周,则 lubridate不会介意,并继续前进一年。
  • 在没有编写自己的 function y_wsette的情况下,我真的很难让mutate玩得很好。 根据我对具有多个输入的变异的经验,或者我正在更改一个值的“属性”而不是整个值本身,我可能需要编写一个 function。 我正在使用lubridate package 根据您的year_week列仅更改年份或星期,因此这是一种快速 function 有助于变异的情况。
  • 当我尝试将rando设置为 Sys.Date() 时,我遇到了一段奇怪的时间,所以我使用make_datetime手动将其设置为某个值。 YMMV

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM