用最新的非 NA 值替换 NA

2024-03-14

In a data.frame (or data.table),我想用最接近的先前非 NA 值“向前填充”NA。一个简单的例子,使用向量(而不是data.frame)如下:

> y <- c(NA, 2, 2, NA, NA, 3, NA, 4, NA, NA)

我想要一个函数fill.NAs()这让我可以构建yy这样:

> yy
[1] NA NA NA  2  2  2  2  3  3  3  4  4

我需要对许多(总共约 1 Tb)小尺寸重复此操作data.frames (~30-50 Mb),其中一行的所有条目均为 NA。解决这个问题的好方法是什么?

我提出的丑陋的解决方案使用这个函数:

last <- function (x){
    x[length(x)]
}    

fill.NAs <- function(isNA){
if (isNA[1] == 1) {
    isNA[1:max({which(isNA==0)[1]-1},1)] <- 0 # first is NAs 
                                              # can't be forward filled
}
isNA.neg <- isNA.pos <- isNA.diff <- diff(isNA)
isNA.pos[isNA.diff < 0] <- 0
isNA.neg[isNA.diff > 0] <- 0
which.isNA.neg <- which(as.logical(isNA.neg))
if (length(which.isNA.neg)==0) return(NULL) # generates warnings later, but works
which.isNA.pos <- which(as.logical(isNA.pos))
which.isNA <- which(as.logical(isNA))
if (length(which.isNA.neg)==length(which.isNA.pos)){
    replacement <- rep(which.isNA.pos[2:length(which.isNA.neg)], 
                                which.isNA.neg[2:max(length(which.isNA.neg)-1,2)] - 
                                which.isNA.pos[1:max(length(which.isNA.neg)-1,1)])      
    replacement <- c(replacement, rep(last(which.isNA.pos), last(which.isNA) - last(which.isNA.pos)))
} else {
    replacement <- rep(which.isNA.pos[1:length(which.isNA.neg)], which.isNA.neg - which.isNA.pos[1:length(which.isNA.neg)])     
    replacement <- c(replacement, rep(last(which.isNA.pos), last(which.isNA) - last(which.isNA.pos)))
}
replacement
}

功能fill.NAs使用如下:

y <- c(NA, 2, 2, NA, NA, 3, NA, 4, NA, NA)
isNA <- as.numeric(is.na(y))
replacement <- fill.NAs(isNA)
if (length(replacement)){
which.isNA <- which(as.logical(isNA))
to.replace <- which.isNA[which(isNA==0)[1]:length(which.isNA)]
y[to.replace] <- y[replacement]
} 

Output

> y
[1] NA  2  2  2  2  3  3  3  4  4  4

...这似乎有效。但是,伙计,这很丑吗!有什么建议么?


您可能想使用na.locf()函数从zoo http://cran.r-project.org/package=zoo打包到将最后的观察结果向前推进替换您的 NA 值。

以下是帮助页面中其使用示例的开头:

library(zoo)

az <- zoo(1:6)

bz <- zoo(c(2,NA,1,4,5,2))

na.locf(bz)
1 2 3 4 5 6 
2 2 1 4 5 2 

na.locf(bz, fromLast = TRUE)
1 2 3 4 5 6 
2 1 1 4 5 2 

cz <- zoo(c(NA,9,3,2,3,2))

na.locf(cz)
2 3 4 5 6 
9 3 2 3 2 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用最新的非 NA 值替换 NA 的相关文章

随机推荐

  • 计算 pow(a,b) mod n

    I want to calculate ab mod n for use in RSA decryption My code below returns incorrect answers What is wrong with it uns
  • 在 PHP openssl 中加密并在 javascript CryptoJS 中解密

    我正在使用 PHP 加密一些参数 openssl parameter AES 256 ECB client 我想解密CryptoJS CryptoJS AES decrypt parameter client mode CryptoJS m
  • 用图像设计按钮?

    我一直在尝试使用图像来设计提交按钮的样式 我会使用 CSS 但按钮的设计太复杂了 我尝试向按钮添加背景图像 但该图像的位置不正确 我也尝试过使用
  • wxPython 是否有原生的 FlowLayoutManager/FlowSizer/WrapSizer 实现?

    我正在尝试在wxPython 2 8 使用Python 2 7 中编写一个GUI 其中涉及在sizer中布置几个wx StaticTexts 我想要的是一个大小调整器 如果它检测到当前行的宽度比窗口的宽度宽 它会自动将任何附加元素添加到新行
  • 通过一组唯一的列值过滤 SQL 查询,无论其顺序如何

    我在 Oracle 中有一个表 其中包含两列 我想在其中查询包含唯一值组合的记录 而不管这些值的顺序如何 例如 如果我有下表 create table RELATIONSHIPS PERSON 1 number not null PERSO
  • 您可以使用 Python 正则表达式从偏移量开始向后搜索吗?

    给定一个字符串以及该字符串中的字符偏移量 我可以使用 Python 正则表达式向后搜索吗 我试图解决的实际问题是在字符串中的特定偏移量处获取匹配短语 但我必须匹配该偏移量之前的第一个实例 在我的正则表达式只有一个符号长 例如 单词边界 的情
  • Android 抛出 IndexOutOfBound 异常

    我制作了一个Android应用程序 因为数据来自服务器 所以这是一个耗时的过程 所以我创建了一个进度对话框 下面是我的代码 Override protected void onResume super onResume if placesL
  • JQuery UI 删除类动画似乎不起作用

    我正在使用一系列 CSS3 转换 但对于较旧的机器 通过使用 JQuery UI 添加和删除类进行备份 JQuery UI addClass 动画功能齐全 然而 JQuery UI removeClass 并没有设置动画 而是延迟动画时间
  • 读取 SML 中的命令行参数

    我正在尝试读取输入文件的名称 argv 1 这是我到目前为止所做的 val args CommandLine arguments val x y args val agora x 但我不断收到此错误消息 uncaught exception
  • Magento - 从选项值 ID 获取自定义选项值详细信息

    我有一些与产品自定义选项相关的有趣问题 选项和自定义选项之间有什么区别吗 这是因为我在几乎所有与产品相关的模块中为每个产品详细信息找到了两个不同的属性 options custom options 然而 只有一个类只适用于产品选项 它倾向于
  • Respond.JS 在 IE 8 中不工作

    由于某种原因 响应 JS 似乎不起作用 我正在使用 IE 8 中的媒体查询来更改各种尺寸显示器的背景图像 在 IE 8 中没有背景 只有纯色 代码如下所示 媒体查询如下所示 media min width 769px and max wid
  • 如何向 JButton 添加行数未知的多行文本? (动态)[重复]

    这个问题在这里已经有答案了 如何在a上制作文字JButton多行 我读到大多数人都使用 HTML 但是当它是动态的并且您不知道行的大 小或行是什么时会发生什么 现在我按钮上的文本以 而不是创建一条新线 大多数其他方法假设您知道该字符串并且是
  • 线程通过 sysfs 调用内核信号量时出现死锁

    源自这个问题 https stackoverflow com q 17391276 912144 and 我的解决方案 https stackoverflow com a 17443774 912144 我开始意识到可能存在僵局 但我不明白
  • 如何在 ASP.NET Core 应用程序中显示和更新自定义身份字段?

    我使用创建了一个 ASP NET Core 应用程序core 3 1我已经包含了开箱即用的身份验证 我想添加一些自定义字段供我的用户完成 例如Location and Instagram 继此处说明 https learn microsof
  • Cocoa 自定义通知示例

    有人可以向我展示一个带有自定义通知的 Cocoa Obj C 对象的示例吗 如何触发它 订阅它并处理它 implementation MyObject Posts a MyNotification message whenever call
  • objectForKey 和 valueForKey 之间的区别?

    有什么区别objectForKey and valueForKey 我在文档中查找了它们 它们对我来说似乎是一样的 objectForKey is an NSDictionary方法 一个NSDictionary是一个类似于集合类NSArr
  • 在 Next.js 中,如何创建“模态链接”(即更改 URL 并添加组件但不重新渲染整个页面的链接)

    当一个站点有一个对话框时 它通常纯粹用 JS 完成 不涉及 页面 即路由 但是 有时您希望对话框有自己的 URL 以便在用户刷新页面时 他们会返回到对话框打开的页面 在 Next js 中 我已经完成了上述大部分工作 我有一个基本页面路由
  • Xcode 找不到 C++ 静态库

    所以我之前遇到过一些问题 但我删除了我的旧问题并将其更新为这个问题 事情是这样的 我想在我的 iOS Swift 项目中使用 C 库 在这个社区的帮助下 我将我的库编译为静态库 a 文件 现在我创建了一个新项目来测试这一点 我只执行了以下步
  • tkinter 复制粘贴到条目不会删除选定的文本

    当我复制一些文本并将其粘贴 ctrl v 到 tkinter Entry 中时 如果有选定的文本 它不会将其从条目中删除 我使用的是 Linux Mint 64 位 Here I copy d with ctrl c Then I sele
  • 用最新的非 NA 值替换 NA

    In a data frame or data table 我想用最接近的先前非 NA 值 向前填充 NA 一个简单的例子 使用向量 而不是data frame 如下 gt y lt c NA 2 2 NA NA 3 NA 4 NA NA