基本上,我有一个非常大的数据帧/数据表,我想在一列中搜索第一个和最近的, NA 小于当前索引位置的值。
NA
例如,假设我有一个数据帧 DF
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页)。我想搜索该列 向后,当它找到
KEY
不适用 向量/列中的值(例如,我可以使用 which(is.na(x)) 不适用 )但是,由于我正在处理的数据帧的绝对大小以及需要执行的大量迭代,这是一种非常低效的方法。我想到的一种方法是创建一种“边做边做”的循环,它看起来确实有效,但这似乎效率很低,因为它每次都需要执行计算(并且考虑到我需要进行100000多次迭代,这看起来不是一个好主意)。
不适用
which(is.na(x))
为什么不向前填充一次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