【发布时间】:2020-01-26 13:10:17
【问题描述】:
我创建了这个数据框,它对我的数据非常有代表性,抱歉代码太长了。
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!
这是我使用此命令时得到的示例。
【问题讨论】:
-
似乎您在某些组中只有
NAs,因此平均值为NaN。 -
那不是我的问题。例如列 JKL,它在第一天的每小时数据中只包含 NA,但是当我创建平均值时,它显示的是 84 而不是 NA!
-
我无法重现此错误。您能否开始一个新的 R 会话,从头到尾运行代码并发布——如果错误仍然存在——观察到的(和期望的)输出?
-
你能再看看我的帖子吗?我添加了一些我的问题的图片。当我重新启动以及使用另一台计算机时会发生这种情况。
-
我坚信
mean()和summarise()在这里可以正常工作。错误出现在数据或分组中。组的大小是否正确(尝试tally())?或者试试testframe %>% group_by(as.Date(Date)) %>% tally()。
标签: r date dplyr mean lubridate