#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)
Стоит отметить, что дни, которые выпадают на первый понедельник любого нового года, попадают на нейтральную полосу, поэтому требуют индивидуального подхода.