Кажется, что это должно быть намного проще, и я уверен, что кто-то может мне помочь. Я пытаюсь изменить каждую дату на первый из соответствующего месяца из data.frame дат с использованием floor_date() в пакете lubridate, однако некоторые из этих дат являются NA. Я бы предпочел не подставлять фиктивные даты для НС.Использование применяется для преобразования дат в R и обработки дат NA
Я попытался ниже:
library(lubridate)
a<-c(as.Date("2011-05-04"), as.Date("2011-06-12"))
b<-c(as.Date("2012-03-01"), NA)
test <- data.frame(a,b)
apply(test, 1, function(y) sapply(y, function(x) if(!is.na(x)) floor_date(x, "month") else na.pass(x)))
apply(test, 1, function(y) ifelse(!is.na(y)), floor_date(y, "month"), na.pass(y))
Первый возвращает вызов:
Error in object[[name, exact = TRUE]] : subscript out of bounds
второй возвращает вызов:
Error in update.default(x, mdays = 1, hours = 0, minutes = 0, seconds = 0) :
need an object with call component
Спасибо за любую помощь!
Большая проблема со всем этим заключается в том, что 'apply' собирается принуждать к матрице и всем атрибутам (включая то, что делает R« Date »дата будет потеряна. Вам нужно будет использовать' lapply' on столбцы, а не работая над строками. –
Вы просто хотите преобразовать каждую дату в первый месяц? Если это так, нет смысла делать это, работая по строкам по одному, что и есть «apply (test) , 1, ....) '. .. Вы должны сделать что-то вроде' data.frame (lapply (test, ...)) '. Это займет каждый из столбцов' test' и выполнит вычисления на них каждый в свою очередь, а затем преобразовать полученный список столбцов обратно в data.frame. –