首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在列末尾使用na.locf函数的NA

在列末尾使用na.locf函数的NA
EN

Stack Overflow用户
提问于 2017-11-12 04:49:41
回答 3查看 630关注 0票数 2

我使用zoo包和na.locf将列中最后出现的值替换为NA。我的问题是,如果最后一行没有数字,函数就会失败。请看我的例子。

代码语言:javascript
复制
> 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
EN

回答 3

Stack Overflow用户

发布于 2017-11-12 10:28:40

代码语言:javascript
复制
# 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

注意:可重现形式的输入为:

代码语言:javascript
复制
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>")
票数 3
EN

Stack Overflow用户

发布于 2017-11-12 05:46:37

我们可以使用tidyr包中的fill函数将最后一个值归结为NA

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2018-10-08 12:06:27

此外,使用imputeTS包的na.locf函数也是一种选择。它有一个方便的na.remaining参数,可以让您选择如何处理剩余的NAs。这对像这样的情况很有帮助。

代码语言:javascript
复制
library("imputeTS")
Dax1Dax2Dax3$Accum1 <- na.locf(Dax1Dax2Dax3$Accum1, na.remaining = "rev")

以下是na.remaining参数的选项:

  • “保留”-使用NAs
  • "rm“返回系列-删除剩余的NAs

“-用总体平均值

  • ”rev“替换剩余的NAs-从相反方向执行nocb / locf
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47242643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档