我正在使用每小时数据集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 )
现在我正在尝试计算工作日和周末之间的总和(列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")
但是我不确定如何将它说成星期一:星期五和星期六:星期天?
我想要实现的是从(368:371)创建4个新行,并添加工作日总数,工作日缺失值数,周末总数,周末缺失值数。
非常感谢, 阿燕
答案 0 :(得分:2)
一些评论。
不要将列总和添加到数据框中。例如,在您的代码中,您有:
df[366,(3:27)] <- colSums(df[,3:27], na.rm = T)
假设我们将您的数据框集中到每个周末。你的列总和是错误的。将它们存储为单独的载体:
year_sums =colSums(df[,3:27], na.rm = TRUE)
由于您的数据框中不再有列总和,因此查询起来更容易。因此,要确定缺失值的数量,请执行以下操作:
colSums(is.na(dd[,3:27])
R将TRUE视为1,将FALSE视为0。
现在回答你的问题。聪明的方法是使用R的日期对象或使用lubridate包。但是,我建议你先从容易开始的事情开始。只需创建一个新列和子集。在您的示例中,一周的第一天是星期五。所以
##M for mid week
##W for week end
df$type = c("M", "W", "W", "M", "M", "M", "M")
创建一个列,用于标识数据是周末还是周中。所以对于子集,只需:
df[df$type == "M",]