Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 计算同一行中开始和结束日期的平均温度(从其他数据集导出)_R_Time Series_Average_Mean - Fatal编程技术网

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

我是R的初学者,我想计算一段时间内的平均温度。我有两个数据集:

  • 具有开始日期(固定日期)和结束日期(断开日期)的数据集


    提前谢谢你

    我们可以使用
    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通过最近在of
    data.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