创建具有许多缺失值的日均值的问题

问题描述 投票:0回答:1

我创建了这个数据框,它对我的​​数据非常具有代表性,对于冗长的代码非常抱歉。

library(lubridate)

datelist = seq(ymd_hms('1980-01-01 00:00:00'),ymd_hms('1980-07-01 00:00:00'), by = '60 mins')

df = data.frame(replicate(2,sample(0:130,4000,rep=TRUE)))
nbr_missing<-1000
y<-data.frame(row=sample(nrow(df),size = nbr_missing,replace = T),
              col=sample(ncol(df),size = nbr_missing,replace = T))

y<-y[!duplicated(y),]
df[as.matrix(y)]<-NA

df2 = data.frame(replicate(2,sample(0:130,369,rep=TRUE)))
nbr_missing<-500
xy<-data.frame(row=sample(nrow(df2),size = nbr_missing,replace = T),
               col=sample(ncol(df2),size = nbr_missing,replace = T))

xy<-xy[!duplicated(xy),]
df2[as.matrix(xy)]<-NA

fill1 = data.frame(matrix(NA, nrow = 4000, ncol = 2))
fill2 = data.frame(matrix(NA, nrow = 369, ncol = 2))

df_new1 = rbind(df, fill2)
df_new2 = rbind(fill1, df2)
df_new = cbind(df_new1, df_new2)

testframe = as.data.frame(cbind(datelist,df_new))
colnames(testframe) = c("Date", "ABC", "DEF", "GHI", "JKL")

我在计算每日平均值时遇到问题。我将此代码与其他数据一起使用了几次,它一直都很好用。但是,这似乎给了我错误的结果。知道为什么以及如何解决这个问题吗?

library(dplyr)
testframe1 = testframe %>%
  group_by(group = gl(n()/24, 24)) %>%
  summarise_at(-1, mean, na.rm = TRUE)

例如,JKL列,第一天的小时数据中仅包含NA,但是当我创建平均值时,它给了我一个数字,而不是NA!

这里是使用此命令时得到的示例。

Hourly data

Wrong result

r date dplyr mean lubridate
1个回答
0
投票

我不确定dplyr代码出了什么问题,您可以将by()方法与colMeans()结合使用。

© www.soinside.com 2019 - 2024. All rights reserved.