2016-01-06 3 views
-4

Я использую for-loop для просмотра списка фреймов данных. Внутри цикла я фильтрую каждый набор данных (включая столбцы даты), а затем вывод используется для вычислений (включая цикл ifelse). Моя проблема заключается в том, что когда-то на выходе фильтра не имеет ни одной строки (пустой набор данных), а затем он остановил for-loop с ошибкойИспользование цикла ifelse с столбцом даты в R

Error in as.POSIXct.numeric(value) : 'origin' must be supplied 

здесь некоторый код, чтобы воспроизвести сообщение об ошибке.

data1 <- data.frame(Date = as.Date("2016-01-01"), Filter1= 6) 
data2 <- data.frame(Date = as.Date("2016-01-01"), Filter1= 3) 
anomalies <- subset(data1, Filter1 <= 3) #won't work with the loop 
anomalies <- subset(data2, Filter1 <= 3) #work with the loop 

if(is.data.frame(anomalies) & nrow(anomalies)==0) { 
     anomalies[1, ] <- 0 
     } else{ 
     anomalies <- anomalies 
     } 

data2 будет работать, но если я бегу data1 я получаю

Error in as.Date.numeric(value) : 'origin' must be supplied 

Я пытался отформатировать дату перед и внутри ifelse цикла, но без успеха. Я знаю несколько вопросов по ifelse и date по SO, но ни один не имеет отношения к пустым кадрам данных. Любая помощь в том, как исправить (или альтернативу) будет очень благодарна!

+2

Не могли бы вы привести пример исходной задачи, которую вы выполняете? Я сомневаюсь, что вам нужен цикл for, и эту пустую проблему с data.frame можно просто избежать. –

+0

Вы пытаетесь присвоить 0 фрейму данных этим утверждением? аномалии [1,] <- 0 – dikesh

+0

, возможно, опубликуйте полный образец кода того, что вы пытаетесь достичь, поэтому люди могут предложить еще лучшие способы сделать это, например, за пределами проблемы as.POSIXct.numeric (value). – shekeine

ответ

0

Благодаря @Paul Hismstra, у меня есть способ обойти мою проблему, добавив строку в каждый набор данных (до моего первого for-loop), чтобы убедиться, что все мои наборы данных пройдут шаг filter. Поступая таким образом, я не должен (или попытаться) полагаться на этот ifelse петли

if(is.data.frame(anomalies) & nrow(anomalies)==0) { 
     anomalies[1, ] <- 0 
     } else{ 
     anomalies <- anomalies 
     } 

Я нашел решение моей проблемы, но не решение о том, как использовать ifelse петлю столбца даты.

Смежные вопросы