#r #date
#r #Дата
Вопрос:
как я могу преобразовать фрейм данных в формат месяца / дня / года?
Я использую следующий код для создания нового столбца в моем фрейме данных, чтобы он содержал даты каждой строки из метаданных.
meta.df.61.69$date = data.frame(date = str_extract(meta.df.61.69$Title,"\d{1,2} \w* \d{4}"))
Когда я запускаю приведенный выше код, R возвращает мне следующее, как видно из первой строки на рисунке: 17 ИЮНЯ 1961 года
По сути, как я могу преобразовать его в формат месяца / дня / года? Что-то вроде этого: 17.06.1961 вместо 17 ИЮНЯ 1961 года.Спасибо!
Возвращение dput(head(meta.df.61.69$date))
ис structure(list(date = c("17 JUNE 1961", "19 JUNE 1961", "20 JUNE 1961", "21 JUNE 1961", "22 JUNE 1961", "23 JUNE 1961")), row.names = c(NA, 6L), class = "data.frame")
Ответ №1:
Класс Date [as.Date()] имеет параметры для указания формата даты. Хотя я обычно предпочитаю, чтобы формат, который у вас есть, был однозначным, ваш желаемый формат будет указан:
format="%m/%d/%Y"
В гугле есть множество примеров и руководств.
Ответ №2:
Попробуй это:
library(lubridate)
library(stringr)
as.Date(str_to_title("17 JUNE 1961"),"%d %B %Y")
Или в вашем случае:
library(lubridate)
library(stringr)
meta.df.61.69$date <- as.Date(str_to_title(meta.df.61.69$date),"%d %B %Y")
Комментарии:
1. Привет @Marcos, спасибо за ваш ответ.
meta.df.61.69$date <- as.Date(str_to_title(meta.df.61.69$date),"%d %B %Y")
Однако, когда я запускаю код, R возвращает мне только значения NA в столбце даты и следующее сообщение: «В stri_trans_totitle(строка, opts_brkiter = stri_opts_brkiter(locale = locale)) : аргумент не является атомарным вектором; принудительный». Что вы могли бы порекомендовать ?2. Если вы можете запустить предложенный код без ошибок, но получаете ошибку при использовании ваших данных, то это поможет поделиться примером ваших данных воспроизводимым способом (не в виде скриншота). Например, вы могли бы включить в свой вопрос вывод
dput(head(meta.df.61.69$date.date))
, который создаст объект данных, точно воссоздающий первые шесть строк вашего столбца.3. привет, @JonSpring, результат
structure(list(date = c("17 JUNE 1961", "19 JUNE 1961", "20 JUNE 1961", "21 JUNE 1961", "22 JUNE 1961", "23 JUNE 1961")), row.names = c(NA, 6L), class = "data.frame")
4. Я действительно не понимаю, что произошло. I работает идеально для меня:
x <- structure(list(date = c("17 JUNE 1961", "19 JUNE 1961", "20 JUNE 1961", "21 JUNE 1961", "22 JUNE 1961", "23 JUNE 1961")), row.names = c(NA, 6L), class = "data.frame") library(lubridate) library(stringr) Sys.setlocale("LC_ALL","English") x$date <- as.Date(str_to_title(x$date),"%d %B %Y")
Ответ №3:
# Sample Data
# Edit: was previously
# my_data <- structure(....
meta.df.61.69 <- structure(list(date.date = c("17 JUNE 1961", "19 JUNE 1961", "20 JUNE 1961", "21 JUNE 1961", "22 JUNE 1961", "23 JUNE 1961")), row.names = c(NA, 6L), class = "data.frame")
# Calculation assuming meta.df.61.69 is a data frame you have
meta.df.61.69$date_ISO8601 = lubridate::dmy(meta.df.61.69$date.date)
meta.df.61.69$date_formatted = format(meta.df.61.69$date_ISO8601 , "%m/%d/%Y")
> meta.df.61.69
date date_ISO8601 date_formatted
1 17 JUNE 1961 1961-06-17 06/17/1961
2 19 JUNE 1961 1961-06-19 06/19/1961
3 20 JUNE 1961 1961-06-20 06/20/1961
4 21 JUNE 1961 1961-06-21 06/21/1961
5 22 JUNE 1961 1961-06-22 06/22/1961
6 23 JUNE 1961 1961-06-23 06/23/1961
Комментарии:
1. Спасибо @JonSpring, но как я могу это сделать, не выбирая даты вручную? Например, без необходимости писать c («17 ИЮНЯ 1961 года») и т. Д. Мои данные охватывают период с 1961 по 1978 год, поэтому я не могу сделать это вручную 🙁
2. Для простоты я изначально назвал свою демонстрационную таблицу ввода
my_data
, но она должна была продемонстрировать, с чем вы хотите работатьmeta.df.61.69
. Я переименовал таблицу в моем примере, чтобы было ясно, что это должно работать и с вашей таблицей, при условии, что остальные данные имеют согласованную форму.3. У меня все еще возникают ошибки @JonSpring. Я расскажу вам шаг за шагом, сначала я запускаю код
meta.df.61.69$date = data.frame(date = str_extract(meta.df.61.69$Title,"\d{1,2} \w* \d{4}"))
, который выдает мне формат даты, который я хочу изменить. Затем я запускаю код, который вы мне предоставили:meta.df.61.69$date_ISO8601 = lubridate::dmy(meta.df.61.69$date)
однако я получаю следующее сообщение: «Не удалось проанализировать все форматы. Форматы не найдены.» Что мне делать? Obs: meta.df.61.69 — это фрейм данных, который у меня есть4. Отредактировано для вызова столбца примера извлеченных данных
date.date
, подобного вашему исходному сообщению, помогает ли это?5. отображается следующее сообщение:
Error in `$<-.data.frame`(`*tmp*`, date_ISO8601, value = numeric(0)) : replacement has 0 rows, data has 2484