Как преобразовать дату с указанием только года в дату в формате «год-месяц-день» в R - PullRequest
0 голосов
/ 02 ноября 2018

Извините за вопрос, я начал использовать RStudio месяц назад, и я сталкиваюсь с вещами, которых я никогда не изучал. За последние два дня я проверил все возможные сайты, справки и форумы, и это сводит меня с ума.

Я получил переменную с именем Release, указывающую дату выпуска песни. Некоторые даты соответствуют формату %Y-%m-%d, тогда как другие дают мне только год. Я бы хотел, чтобы они были одинаковыми, но я изо всех сил пытаюсь изменить наблюдения с годом.

Краткое резюме на слове:

11/11/2011
01/06/2011
1974
1970
16/09/2003

Я импортировал данные с:

music<-read.csv("music2.csv", header=TRUE, sep = ",", encoding = "UTF-8",stringsAsFactors = F)

А вот так у меня это в RStudio

"2011-11-11" "2011-06-01" "1974" "1970" "2003-09-16" 

Это пример, когда я набрал 2200 очков.

Рабочий код

Modifdates<- ifelse(nchar(music$Release)==4,paste0("01-01-",music$Release),music$Release)
Modifdates

Я получаю это:

"2011-11-11" "2011-06-01" "01-01-1974" "01-01-1970" "2003-09-16" 

Мне бы хотелось, чтобы все они были в одном и том же формате "% Y-% m-% d". Как я могу это сделать?

Итак, я попробовал это

as.Date(music$Release,format="%Y-%m-%d")

Но я получил НС, где я изменил свои даты.

Может ли кто-нибудь помочь?

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Обновление

Используя sub, найдите вхождения даты, состоящей из одного года (часть "(^[0-9]{4}$)"), используя обратную ссылку, замените ее, чтобы добавить -01-01 в конце строки (часть "\\1-01-01"), и, наконец, преобразуйте ее для класса date, используя as.Date() (as.Date() по умолчанию format = "%Y-%m-%d", поэтому вам не нужно его указывать):

dat <- c("2011-11-11", "2011-06-01", "1974", "1970", "2003-09-16") 
dat класс character:
as.Date(sub("(^[0-9]{4}$)", "\\1-01-01", dat))

# "2011-11-11" "2011-06-01" "1974-01-01" "1970-01-01" "2003-09-16"
dat класс равен factor, но sub автоматически приведёт его к классу character для вас:
# dat <- as.factor(dat); dat

# 2011-11-11 2011-06-01 1974       1970       2003-09-16
# Levels: 1970 1974 2003-09-16 2011-06-01 2011-11-11

as.Date(sub("(^[0-9]{4}$)", "\\1-01-01", dat))

# "2011-11-11" "2011-06-01" "1974-01-01" "1970-01-01" "2003-09-16"
0 голосов
/ 02 ноября 2018

Добро пожаловать в SO, пожалуйста, постарайтесь привести воспроизводимый пример в следующий раз, чтобы мы могли лучше помочь вам. Я думаю, что здесь вы можете использовать:

testdates <- c("1974", "12-12-2012")
betterdates <- ifelse(nchar(testdates)==4,paste0("01-01-",testdates),testdates)
> betterdates
[1] "01-01-1974" "12-12-2012"

РЕДАКТИРОВАТЬ: если ваш вектор является фактором, вы должны сначала использовать as.character.factor. Если затем вы хотите преобразовать обратно в коэффициент, вы можете использовать as.factor

EDIT2: не конвертируйте as.date перед этим. Делайте это только после этой модификации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...