代码之家  ›  专栏  ›  技术社区  ›  ThePlowKing

在R中向后搜索向量/数据表

  •  2
  • ThePlowKing  · 技术社区  · 7 年前

    基本上,我有一个非常大的数据帧/数据表,我想在一列中搜索第一个和最近的, NA 小于当前索引位置的值。

    例如,假设我有一个数据帧 DF

    INDEX | KEY   |   ITEM
    ----------------------
     1    |  10   |    AAA
     2    |  12   |    AAA
     3    |  NA   |    AAA
     4    |  18   |    AAA
     5    |  NA   |    AAA
     6    |  24   |    AAA
     7    |  29   |    AAA
     8    |  31   |    AAA
     9    |  34   |    AAA
    

    在索引3和索引5处的值。现在,假设我们从索引8开始(它具有 KEY 第31页)。我想搜索该列 向后,当它找到

    不适用 向量/列中的值(例如,我可以使用 which(is.na(x)) 不适用 )但是,由于我正在处理的数据帧的绝对大小以及需要执行的大量迭代,这是一种非常低效的方法。我想到的一种方法是创建一种“边做边做”的循环,它看起来确实有效,但这似乎效率很低,因为它每次都需要执行计算(并且考虑到我需要进行100000多次迭代,这看起来不是一个好主意)。

    不适用

    1 回复  |  直到 7 年前
        1
  •  4
  •   Marius    7 年前

    为什么不向前填充一次NA索引,这样您就可以在以后的任何一行中查找最近的NA:

    library(dplyr)
    library(tidyr)
    
    df = df %>%
        mutate(last_missing = if_else(is.na(KEY), INDEX, as.integer(NA))) %>%
        fill(last_missing)
    

    输出:

    > df
      INDEX KEY ITEM last_missing
    1     1  10  AAA           NA
    2     2  12  AAA           NA
    3     3  NA  AAA            3
    4     4  18  AAA            3
    5     5  NA  AAA            5
    6     6  24  AAA            5
    7     7  29  AAA            5
    8     8  31  AAA            5
    9     9  34  AAA            5