【问题标题】:Fill missing rows in a column based on average of row above and below根据上下行的平均值填充列中缺失的行
【发布时间】:2021-01-25 21:25:05
【问题描述】:

我正在处理水质数据,我需要在进行测量时根据潮高校正水深。在两天或更长时间内,每分钟测量一次 pH 值、盐度等,但我所拥有的潮汐高度数据仅每小时测量一次。本质上,我想扩展我的潮汐高度数据,通过平均每小时的潮汐高度来每分钟进行一次潮汐测量。一旦我有了,我可以 left_join() 到我的水参数数据框没问题

我更喜欢使用 tidyverse,但此时我会欣喜若狂地寻求任何帮助。抱歉有任何格式问题,这是我的第一个 StackOverflow 问题。

这里是一天的潮高数据框示例:

> Tide_x <- data.frame(Time_Eastern_hr = c(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+                                          11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23), 
+                     Tide_Height = c(1.9, 1.7, 1.4, 1.1, 0.8, 0.6, 0.5, 0.6, 0.8, 1.1, 1.4, 1.6, 1.7, 
+                                     1.6, 1.5, 1.2, 1, 0.8, 0.8, 0.9, 1.1, 1.4, 1.7, 1.9))
> Tide_x
   Time_Eastern_hr Tide_Height
1                0         1.9
2                1         1.7
3                2         1.4
4                3         1.1
5                4         0.8
6                5         0.6
7                6         0.5
8                7         0.6
9                8         0.8
10               9         1.1
11              10         1.4
12              11         1.6
13              12         1.7
14              13         1.6
15              14         1.5
16              15         1.2
17              16         1.0
18              17         0.8
19              18         0.8
20              19         0.9
21              20         1.1
22              21         1.4
23              22         1.7
24              23         1.9

但我需要这样的东西,其中 Tide_Height 每分钟计算一次,作为上下 Tide_Height 测量值的平均值。 这里我使用了 1.9 和 1.7,所以 0.2/60 来获得每分钟潮汐高度变化的量,然后在我向下移动列时从上面的行中减去该变化

    Time_Eastern_hr Tide_Height
 1               0          1.9
 2         0.01667       1.8967
 3         0.03334       1.8933
 4            0.05       1.8900
 5          0.0667       1.8867
 6          0.0833       1.8833
 7             0.1       1.8800
 8          0.1167       1.8767
 9          0.1333       1.8734
              0.15       1.8701
# … with 14 more rows

但是,正如您所见,我不能仅仅因为潮汐比前一小时更高或更低而不断减去,而不是不断降低。此外,每个小时的潮汐之间的差异也会发生变化。

【问题讨论】:

    标签: r


    【解决方案1】:

    approx 函数是我们这里的朋友!它在两点之间线性插值数据,这与您手动计算的加权平均值相同。

    Tide_x <- data.frame(Time_Eastern_hr = c(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23), 
                         Tide_Height = c(1.9, 1.7, 1.4, 1.1, 0.8, 0.6, 0.5, 0.6, 0.8, 1.1, 1.4, 1.6, 1.7, 1.6, 1.5, 1.2, 1, 0.8, 0.8, 0.9, 1.1, 1.4, 1.7, 1.9))
    new_tide_times <- seq(min(Tide_x$Time_Eastern_hr), max(Tide_x$Time_Eastern_hr), 1/60)
    new_tide_heights <- approx(Tide_x$Time_Eastern_hr, Tide_x$Tide_Height, new_tide_times)$y
    
    new_tides <- data.frame(new_tide_times, new_tide_heights)
    

    返回

      new_tide_times new_tide_heights
    1     0.00000000         1.900000
    2     0.01666667         1.896667
    3     0.03333333         1.893333
    4     0.05000000         1.890000
    5     0.06666667         1.886667
    6     0.08333333         1.883333
    

    【讨论】:

    • 太棒了!如果您对它感到满意,请随意点击复选标记,以便我们知道这是一个令人满意的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    • 2021-12-25
    相关资源
    最近更新 更多