我使用zoo包和na.locf将列中最后出现的值替换为NA。我的问题是,如果最后一行没有数字,函数就会失败。请看我的例子。
> tail(Dax1Dax2Dax3)
Time Res1 Accum1 Res2 Accum2 Res3 Accum3
2 2017-10-18 -109.41 171103.61 <NA> <NA> <NA> <NA>
1 2017-10-20 1174.60 172278.21 <NA> <NA> <NA> <NA>
406 2017-10-23 <NA> <NA> 1473.25 185076.53 <NA> <NA>
664 2017-10-25 <NA> <NA> <NA> <NA> -80.19 188974.10
663 2017-10-26 <NA> <NA> <NA> <NA> 398.16 189372.27
662 2017-11-07 <NA> <NA> <NA> <NA> -348.37 189023.90
require(zoo)
Dax1Dax2Dax3$Accum1 <- na.locf(Dax1Dax2Dax3$Accum1, fromLast = TRUE)
Error in `$<-.data.frame`(`*tmp*`, Accum1, value = c(253L, 253L, 253L, :
replacement has 913 rows, data has 917
> dim(Dax1Dax2Dax3)
[1] 917 7发布于 2017-11-12 10:28:40
# 1
Dax1Dax2Dax3$Accum1 <- na.locf(Dax1Dax2Dax3$Accum1, fromLast = TRUE, na.rm = FALSE)
# 2
Dax1Dax2Dax3$Accum1 <- na.locf0(Dax1Dax2Dax3$Accum1, fromLast = TRUE)
# 3
Dax1Dax2Dax3$Accum1 <- na.locf(Dax1Dax2Dax3$Accum1, fromLast = TRUE, rule = 1)有关详细信息,请参阅?na.locf。
注意:可重现形式的输入为:
Lines <- "
Time Res1 Accum1 Res2 Accum2 Res3 Accum3
2 2017-10-18 -109.41 171103.61 <NA> <NA> <NA> <NA>
1 2017-10-20 1174.60 172278.21 <NA> <NA> <NA> <NA>
406 2017-10-23 <NA> <NA> 1473.25 185076.53 <NA> <NA>
664 2017-10-25 <NA> <NA> <NA> <NA> -80.19 188974.10
663 2017-10-26 <NA> <NA> <NA> <NA> 398.16 189372.27
662 2017-11-07 <NA> <NA> <NA> <NA> -348.37 189023.90"
Dax1Dax2Dax3 <- read.table(text = Lines, na.strings = "<NA>")发布于 2017-11-12 05:46:37
我们可以使用tidyr包中的fill函数将最后一个值归结为NA。
library(tidyr)
Dax1Dax2Dax3 %>% fill(Res1, Accum1, Res2, Accum2)
# Time Res1 Accum1 Res2 Accum2 Res3 Accum3
# 2 2017-10-18 -109.41 171103.6 NA NA NA NA
# 1 2017-10-20 1174.60 172278.2 NA NA NA NA
# 406 2017-10-23 1174.60 172278.2 1473.25 185076.5 NA NA
# 664 2017-10-25 1174.60 172278.2 1473.25 185076.5 -80.19 188974.1
# 663 2017-10-26 1174.60 172278.2 1473.25 185076.5 398.16 189372.3
# 662 2017-11-07 1174.60 172278.2 1473.25 185076.5 -348.37 189023.9发布于 2018-10-08 12:06:27
此外,使用imputeTS包的na.locf函数也是一种选择。它有一个方便的na.remaining参数,可以让您选择如何处理剩余的NAs。这对像这样的情况很有帮助。
library("imputeTS")
Dax1Dax2Dax3$Accum1 <- na.locf(Dax1Dax2Dax3$Accum1, na.remaining = "rev")以下是na.remaining参数的选项:
“-用总体平均值
https://stackoverflow.com/questions/47242643
复制相似问题