R中的数据聚合循环


妖邪
2024-12-26 01:55:41 (1月前)
  1. 我正面临聚合我的问题


数据
</跨度>
每天

数据
</跨度>

我有一个

数据
</跨度>
NAs被删除的框架(图片的链接)

数据
</跨度>
如下所示)。

数据
</跨度>
已经每天收集3次 ,但有时由于NAs,每天只有1或2个条目;有些日子

数据
</跨度>
完全没有了。

我现在有兴趣计算“dist”的每日平均值:这意味着总结一下

数据
</跨度>

4 条回复
  1. 0# 晴天?霹雳 | 2019-08-31 10-32



    看起来你的主要问题是你的

    date

    田野有时间附加。您需要做的第一件事是创建一个只使用类似日期的列




    1. Dis_sub$date_only <- as.Date(Dis_sub$date)

    2. </code>


    然后使用Joris Meys的解决方案(这是正确的方法)应该可行。



    但是,如果由于某种原因你



    想要使用循环,你可以尝试类似的东西




    1. newFrame <- data.frame()
      for d in unique(Dis_sub$date){
      meanDist <- mean(Dis_sub$dist[Dis_sub$date==d],na.rm=TRUE)
      newFrame <- rbind(newFrame,c(d,meanDist))
      }

    2. </code>


    但请记住,这将是缓慢且内存效率低下的。


  2. 1# 晴天3 | 2019-08-31 10-32



    不要使用循环。使用R.一些示例数据:




    1. dates <- rep(seq(as.Date(“2001-01-05”),
      as.Date(“2001-01-20”),
      by=”day”),
      each=3)
      values <- rep(1:16,each=3)
      values[c(4,5,6,10,14,15,30)] <- NA

    2. </code>


    和任何:




    1. aggregate(values,list(dates),mean,na.rm=TRUE)

    2. tapply(values,dates,mean,na.rm=TRUE)

    3. </code>


    给你你想要的。也可以看看

    ?aggregate



    ?tapply




    如果您想要返回数据帧,可以查看该包

    plyr





    1. Data <- as.data.frame(dates,values)
      require(plyr)

    2. ddply(data,”dates”,mean,na.rm=TRUE)

    3. </code>


    请记住

    ddply

    尚未完全支持日期格式(尚未)。


  3. 2# Jacob | 2019-08-31 10-32



    看着那(这

    data.table

    特别是如果您的数据很庞大。这是一些计算平均值的代码

    dist

    通过

    day





    1. library(data.table)
      dt = data.table(Data)
      Data[,list(avg_dist = mean(dist, na.rm = T)),’date’]

    2. </code>

登录 后才能参与评论