【问题标题】:Subsetting dataset for weekday and weekend and calculating sum of columns为工作日和周末设置子集数据集并计算列的总和
【发布时间】:2012-04-16 06:07:57
【问题描述】:

我正在使用每小时数据集 1 年,并尝试计算工作日(周一至周五)和周末(周六、周日)值的总和,并添加到数据集底部的新行中。我的数据框如下所示:

我使用以下命令创建了整周的总和:

## 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 )

现在我正在尝试计算 (Column v1:total) 之间的工作日和周末总和以及缺失值的数量,并像我在所有日子中所做的那样添加底部的行。

我知道我需要以某种方式定义我的日期,以便 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")

但我不确定如何将其子集表示为周一:​​周五和周六:周日?

我想要实现的是从 (368:371) 创建 4 个新行,并添加工作日总数、工作日缺失值数、周末总数、周末缺失值数。

非常感谢, 绫

【问题讨论】:

    标签: r date dataframe subset


    【解决方案1】:

    几厘米。

    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",]
      

    【讨论】:

    • 感谢科林,这正是我想做的!非常感谢您的帮助。亲切的问候,
    猜你喜欢
    • 2019-11-02
    • 1970-01-01
    • 2017-01-19
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多