【问题标题】:Replace missing value with average of that month [duplicate]用该月的平均值替换缺失值[重复]
【发布时间】:2018-02-07 04:08:13
【问题描述】:

我有每天的入住数据,入住百分比中有一些空值(NA)。

我想用相应的 ID 替换相应月份的入住百分比。

我会用一个示例数据(模拟数据)来解释:

Date       ID   Occupancy%
1/2/2018    1   95
2/2/2018    1   94
3/2/2018    1   94
4/2/2018    1   96
5/2/2018    1   94
6/2/2018    1   NA
7/2/2018    1   96
8/2/2018    1   94
1/2/2018    2   75
2/2/2018    2   NA
3/2/2018    2   79
4/2/2018    2   82
5/2/2018    2   NA
6/2/2018    2   76
7/2/2018    2   78
8/2/2018    2   80

我想用那个月的平均值和它的 ID 替换 NA。

我希望结果是

  1. 6/2/2018 1 NA 应该是 6/2/2018 1 94.7
  2. 1/2/2018 2 NA 应该是 1/2/2018 2 78.3
  3. 5/2/2018 2 NA 应该是 5/2/2018 2 78.3

关于如何在 r 中实现这一点的任何建议?

或者用SQL容易实现吗,如果可以怎么实现?

【问题讨论】:

    标签: r data-extraction


    【解决方案1】:
    a=with(dat,ave(Occupancy.,sub(".*?\\/","",Date),ID,FUN=function(x)mean(x,na.rm=T)))
    > transform(dat,b=replace(x<-Occupancy.,y<-is.na(x),a[y]))
           Date ID Occupancy.        b
    1  1/2/2018  1         95 95.00000
    2  2/2/2018  1         94 94.00000
    3  3/2/2018  1         94 94.00000
    4  4/2/2018  1         96 96.00000
    5  5/2/2018  1         94 94.00000
    6  6/2/2018  1         NA 94.71429
    7  7/2/2018  1         96 96.00000
    8  8/2/2018  1         94 94.00000
    9  1/2/2018  2         75 75.00000
    10 2/2/2018  2         NA 78.33333
    11 3/2/2018  2         79 79.00000
    12 4/2/2018  2         82 82.00000
    13 5/2/2018  2         NA 78.33333
    14 6/2/2018  2         76 76.00000
    15 7/2/2018  2         78 78.00000
    16 8/2/2018  2         80 80.00000
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-05
      • 2012-05-03
      • 2018-12-27
      • 1970-01-01
      • 2018-05-26
      • 2017-02-24
      • 2013-09-07
      相关资源
      最近更新 更多