R 计算同一行中开始和结束日期的平均温度(从其他数据集导出)
我是R的初学者,我想计算一段时间内的平均温度。我有两个数据集:R 计算同一行中开始和结束日期的平均温度(从其他数据集导出),r,time-series,average,mean,R,Time Series,Average,Mean,我是R的初学者,我想计算一段时间内的平均温度。我有两个数据集: 具有开始日期(固定日期)和结束日期(断开日期)的数据集 提前谢谢你 我们可以使用data.table中的foverlaps。将'ds'和'ds2'data.frame转换为data.table,并将键设置为'date\u fixed'和'date\u break'。然后在“数据表”上应用foverlaps,得到“温度”的平均值,按“固定日期”和“断裂日期”分组 library(data.table) ds2 <- data.f
提前谢谢你 我们可以使用
data.table
中的foverlaps
。将'ds'和'ds2'data.frame
转换为data.table
,并将键设置为'date\u fixed'和'date\u break'。然后在“数据表”上应用foverlaps
,得到“温度”的平均值,按“固定日期”和“断裂日期”分组
library(data.table)
ds2 <- data.frame(date_fixed=weather$date,
date_broken = weather$date, temperature = weather$temperature)
setDT(ds2, key = c("date_fixed", "date_broken"))
setDT(ds, key = c("date_fixed", "date_broken") )
foverlaps(ds2, ds)[, .(avg_temp = mean(as.numeric(as.character(temperature)))) ,
by = .(date_fixed, date_broken)]
# date_fixed date_broken avg_temp
#1: 2015-03-16 2015-03-18 11.00000
#2: 2015-03-19 2015-03-22 11.33333
注2:虽然我们可以使用
来实现这一点,但最好还是坚持使用foverlaps
我在天气数据中使用了stringsAsFactors=FALSE。框架定义
ds$average_temperature= apply(ds, 1, function(x) mean(as.numeric(weather[weather$date >= x[1] & weather$date <= x[2],2])) )
ds$average\u temperature=apply(ds,1,函数(x)mean(如数值形式)(weather[weather$date>=x[1]&weather$date另一种可能的解决方案,使用lubridate
和%在%
library(lubridate)
ds$average_Temp <- sapply(interval(ds$date_fixed, ds$date_broken), function(i)
mean(weather$temperature[weather$date %within% i]))
ds
# date_fixed date_broken average_Temp
#1 2015-03-16 2015-03-18 11.00000
#2 2015-03-19 2015-03-22 11.33333
库(lubridate)
ds$average_Temp通过最近在ofdata.table,v1.9.7
中实施的非相等连接功能,可按如下方式执行:
require(data.table) #v1.9.7
setDT(weather)[ds, mean(temperature), on=.(date>=date_fixed, date<=date_broken), by=.EACHI]
# date date V1
# 1: 2015-03-16 2015-03-18 11.00000
# 2: 2015-03-19 2015-03-22 11.33333
require(data.table)#v1.9.7
setDT(天气)[ds,平均(温度),开启=。(date>=date_fixed,DateThank!现在我还有其他列,我在上面的最小工作示例中没有提供。这些列包含有关“ds”和“weather”中位置的信息。我只想在这些位置完全相同的情况下计算平均温度,是否可以将此类条件添加到您的解决方案中?谢谢:)您好@Nena。您必须进行聚合(按某种方式分组)。如果您向我提供一些数据,我将更新我的solution.ds,因此我希望按“位置”和“位置”进行聚合
ds$avg_temp <- unlist(Map(function(x,y) with(weather,
mean(as.numeric(as.character(temperature[date >=x & date <= y])))) ,
ds$date_fixed, ds$date_broken))
ds$average_temperature= apply(ds, 1, function(x) mean(as.numeric(weather[weather$date >= x[1] & weather$date <= x[2],2])) )
library(lubridate)
ds$average_Temp <- sapply(interval(ds$date_fixed, ds$date_broken), function(i)
mean(weather$temperature[weather$date %within% i]))
ds
# date_fixed date_broken average_Temp
#1 2015-03-16 2015-03-18 11.00000
#2 2015-03-19 2015-03-22 11.33333
weather$temperature <- as.numeric(as.character(weather$temperature))
require(data.table) #v1.9.7
setDT(weather)[ds, mean(temperature), on=.(date>=date_fixed, date<=date_broken), by=.EACHI]
# date date V1
# 1: 2015-03-16 2015-03-18 11.00000
# 2: 2015-03-19 2015-03-22 11.33333