Поднабор набора данных для дня недели и выходных и расчета суммы столбцов - PullRequest
1 голос
/ 02 апреля 2012

Я работаю с почасовым набором данных за 1 год и пытаюсь вычислить сумму значений дня недели (понедельник - пятница) и выходного дня (суббота, воскресенье) и добавить новую строку в нижней части набора данных.мой фрейм данных выглядит так:

enter image description here

Я создал сумму за всю неделю с помощью следующей команды:

## calculate column sum
df[366,(3:27)] <- colSums(df[,3:27], na.rm = T)

Затем рассчитал количество пропавших без вестизначения в каждом столбце с этим:

## calculate number of missing values in a column

NA.find <- function(x) length(which(is.na(x))) #function for finding missing values
myNumCols <- which(unlist(lapply(df, is.numeric))) 
df[(nrow(df) + 1), myNumCols] <- sapply(df[, myNumCols],NA.find )

Теперь я пытаюсь вычислить сумму дня недели и выходных дней между (столбец v1: итог), а также количество пропущенных значений и добавить нижние строки, как я сделал длявсе дни.

Я знаю, что мне нужно как-то определить свою дату, чтобы R мог прочитать ее, а затем использовать некоторые способы подстановки дня недели и выходных, я выяснил, как подгруппировать человека следующим образом:

e = colsplit(df1$date,split=" ",names=c("day1","day2","month"))

df2 = cbind(df1[,c("type","date")],day=e[1],cdate=e[2],month=e[3],df1[,3:ncol(df1)])
df3 = subset(df2, day1 == "Mon")

Но я не уверен, как можно подмножество сказать: пн: пятница и снова суббота: воскресенье?

То, чего я пытаюсь добиться, - это создать 4 новые строки из (368: 371) и добавить общее количество дней недели, количество пропущенных значений в течение дня, общее количество выходных, количество пропущенных значений в выходные дни.

Большое спасибо, Аян

1 Ответ

2 голосов
/ 02 апреля 2012

Несколько комментариев.

  1. Не добавляйте суммы столбцов в ваш фрейм данных.Например, в вашем коде у вас есть:

    df[366,(3:27)] <- colSums(df[,3:27], na.rm = T)
    

    Предположим, мы подбираем ваш фрейм данных на каждые выходные.Вы столбцы суммы неверны.Сохраните их как отдельный вектор:

    year_sums =colSums(df[,3:27], na.rm = TRUE)
    
  2. Поскольку у вас больше нет суммы столбцов во фрейме данных, запрос проще.Таким образом, чтобы определить количество пропущенных значений, сделайте что-то вроде:

    colSums(is.na(dd[,3:27])
    

    R рассматривает TRUE как 1 и FALSE как 0.

  3. Теперь, чтобы ответить на ваш вопрос.Умный способ - использовать объект даты R или использовать пакет lubridate.Однако я бы посоветовал вам начать с чего-то немного проще.Просто создайте новый столбец и подмножество.В вашем примере первый день недели - пятница.Таким образом,

    ##M for mid week
    ##W for week end 
    df$type = c("M", "W", "W", "M", "M", "M", "M")
    

    создает столбец, определяющий, являются ли данные выходными или серединой недели.Итак, для подмножества просто:

    df[df$type == "M",]
    
...