根据之前的值替换列中的 NA 值

问题描述 投票:0回答:1

我有这个大数据框/矩阵,其中包含不同时间戳的气温值。

> head(data)
        V2 V3   V9
1 20210101  0 13.4
2 20210101  5 13.4
3 20210101 10 13.2
4 20210101 15 13.1
5 20210101 20 13.0
6 20210101 25 12.8
...

假设从 7 到 10 的观察,V9 的值都是 NA。我想将第 7 行到第 10 行的这些 NA 值替换为之前观察到的值,在本例中为 12.8。我使用 Zoo 包在 RStudio 中尝试了这些命令。 (数据是我的数据集的数据框)。

library(zoo)
na.locf(data$V9)

但是,结果表明它们仍然是 NA 值。没有替代品。我还尝试将 dyplr 包与 fill()、direction = "up" 一起使用,但没有替换 NA 值。我只是认为,如果我选择这样的特定列,则替换者不会关心时间范围。或者确实如此?这里有什么技巧吗?我该怎么办?请指教。

r replace time-series na
1个回答
0
投票

na.locf
有一个
fromLast=
参数尝试将其设置为
TRUE

> transform(dat, V9=zoo::na.locf(V9, fromLast=TRUE))
         V2 V3   V9
1  20210101  0 13.4
2  20210101  5 13.4
3  20210101 10 13.2
4  20210101 15 13.1
5  20210101 20 13.0
6  20210101 25 12.8
7  20210101  0 13.4
8  20210101  5 13.4
9  20210101 10 13.2
10 20210101 15 13.1
11 20210101 20 13.0
12 20210101 25 12.8

数据:

> dput(dat)
structure(list(V2 = c(20210101L, 20210101L, 20210101L, 20210101L, 
20210101L, 20210101L, 20210101L, 20210101L, 20210101L, 20210101L, 
20210101L, 20210101L), V3 = c(0L, 5L, 10L, 15L, 20L, 25L, 0L, 
5L, 10L, 15L, 20L, 25L), V9 = c(13.4, 13.4, 13.2, 13.1, 13, 12.8, 
NA, NA, NA, NA, NA, NA)), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"))
© www.soinside.com 2019 - 2024. All rights reserved.