Преобразование номера недели и года обратно в формат даты

#r #date #as.date

#r #Дата #as.date

Вопрос:

Хотя я нашел решения по этому вопросу, в моем случае код возвращает только NA s. Что не так? Рабочий пример ниже:

 df <- data.frame("date" = seq(as.Date("2015/1/1"), as.Date("2016/1/1"), by = "day"))
df$week <- format(df$date, "%W-%Y")
str(df)

# week back into proper date
df$week_date <- as.Date(paste0("01-", df$week), format = "%w-%W-%Y")
str(df)
 

Комментарии:

1. Похоже, что если убрать начальный ноль, то это в основном работает… as.Date(paste0("1-", df$week), format = "%w-%W-%Y")

2. Похоже, он не знает, как обрабатывать, когда неделя = 0, поэтому вы все равно получаете NA для этих случаев.

Ответ №1:

@cory: ваш ответ правильный и привел меня к поиску решения. R документация для strptime says:

%w День недели как десятичное число (0—6, воскресенье равно 0).

%W Неделя года в виде десятичного числа (00—53) с использованием понедельника в качестве первого дня недели (и обычно с первым понедельником года в качестве дня 1 недели 1). Соглашение Великобритании.

Итак, это работает, как и ожидалось paste0 , только после одной цифры:

 df <- data.frame("date" = seq(as.Date("2014/1/1"), as.Date("2016/1/1"), by = "day"))
df$week <- format(df$date, "%W-%Y")
str(df)

# week back into proper date
df$week_date <- as.Date(paste0("1-", df$week), format = "%w-%W-%Y")

str(df)
View(df)
 

Стоит отметить, что дни, которые выпадают на первый понедельник любого нового года, попадают на нейтральную полосу, поэтому требуют индивидуального подхода.