Я использую цикл for для создания списка дат с последовательностью дат от открытой даты до закрытой даты. Моя проблема в том, что список содержит 41 элемент, а не 63 элемента, которые мне нужны. Логика кажется отчасти правильной, но вывод неполон.
Я пытаюсь создать линейный график в R, который показывает, сколько инцидентов информационной безопасности открыто в определенный момент времени.
Я прочитал CSV с данными. Создайте три вектора из столбцов: дата инцидента была открыта, дата инцидента была закрыта (если инцидент не был закрыт, я заменяю NA текущей датой) и номер инцидента. Я использую lubridate для форматирования двух векторов даты как даты.
Я создаю фрейм данных с этими тремя векторами и принимаю число строк в качестве переменной n (в данном случае это 63). Я создаю пустой список, а затем запускаю цикл for, создающий список списков, каждый элемент в списке представляет собой последовательность дат от даты открытия до даты закрытия.
Моя проблема в том, что список содержит 41 элемент, а не 63 элемента, которые мне нужны.
library(lubridate)
Чтение данных реестра инцидентов
incidents.data <- read.csv("incidents2019.csv")
#Create vector for columns that with data of incident open date, incident closed dates and incident number
incident.open <- dmy(incidents.data$Date.Reported.to.InfoSecGov..Day.B.)
incident.closed <- mdy(incidents.data$Closing.Date..Day.I.)
incident.number <- incidents.data$Incident.Num
Нет NA, заменено, в процессе закрытия даты с сегодняшней датой.
incident.closed.full <- incident.closed %>% replace_na(as.Date ("2019/6/12"))
Создать набор данных с датами
data <- data.frame(incident.number, incident.open, incident.closed.full)
n <- nrow(data)
mylist <- list()
for(i in 1:n){
mylist[[i]] <- seq(as.Date(data$incident.open[i]), as.Date (data$incident.closed.full[i]), "days")
}
d <- do.call("c", mylist)
df <- data.frame(table(d))
Данные графика
plot(df$d, df$Freq, main = "Information Security Incidents In Process", xlab="Date", ylab="# of InfoSec Incidents in Process")
lines(df$Freq)
Я получаю это сообщение об ошибке:
Ошибка в seq.int (0, to0 - from, by): неверный вход в аргумент 'by'