【问题标题】:Extrapolate by last available value in R [duplicate]按 R 中的最后一个可用值推断 [重复]
【发布时间】:2016-07-29 16:02:25
【问题描述】:

我的数据是这样的

> data
   ID Price
1   1     1
2   2     3
3   3    NA
4   4    NA
5   5     7
6   6     6
7   7    NA
8   8    NA
9   9    NA
10 10    10

我想通过最后一个可用值来推断值,以便我的数据看起来像这样

> data_final
   ID Price
1   1     1
2   2     3
3   3     3
4   4     3
5   5     7
6   6     6
7   7     6
8   8     6
9   9     6
10 10    10

任何帮助将不胜感激

【问题讨论】:

  • 参见 -e.g.- here、here 和 ?approx 的参数
  • 嗯,哪种方法对第一个位置的 NA 具有鲁棒性

标签: r


【解决方案1】:

我们可以使用na.locf

library(zoo)
data$Price <- na.locf(data$Price)
data$Price
#[1]  1  3  3  3  7  6  6  6  6 10

【讨论】:

    【解决方案2】:

    你可以在 tidyr 中使用fill

    library(tidyr)
    > fill(df, Price)
    ID Price
    1   1     1
    2   2     3
    3   3     3
    4   4     3
    5   5     7
    6   6     6
    7   7     6
    8   8     6
    9   9     6
    10 10    10
    

    【讨论】:

      【解决方案3】:

      这是基础 R 中的一个方法:

      # construct data.frame
      data <- data.frame("ID"=1:10, "Price"=c(1,3,NA,NA,7,6,NA,NA,NA,10))
      # loop through vector iteratively replacing subsets of missing values
      while(any(is.na(data$Price))) {
        data[, "Price"][is.na(data$Price)] <- data[, "Price"][which(is.na(data$Price))-1]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-08-24
        • 1970-01-01
        • 2018-03-18
        • 2017-11-27
        • 1970-01-01
        • 2019-05-06
        • 1970-01-01
        • 2015-01-28
        相关资源
        最近更新 更多