从 R 数据框中清理“Inf”值

2024-01-07

在 R 中,我有一个操作可以创建一些Inf当我转换数据框时的值。

我想把这些Inf值转化为NA价值观。我的代码对于大数据来说很慢,有没有更快的方法?

假设我有以下数据框:

dat <- data.frame(a=c(1, Inf), b=c(Inf, 3), d=c("a","b"))

在单个案例中,以下工作:

 dat[,1][is.infinite(dat[,1])] = NA

所以我用以下循环概括了它

cf_DFinf2NA <- function(x)
{
    for (i in 1:ncol(x)){
          x[,i][is.infinite(x[,i])] = NA
    }
    return(x)
}

但我不认为这真正利用了R的力量。


Option 1

使用以下事实:data.frame是一个列列表,然后使用do.call重新创建一个data.frame.

do.call(data.frame,lapply(DT, function(x) replace(x, is.infinite(x),NA)))

选项 2——data.table

你可以使用data.table and set。这避免了一些内部复制。

DT <- data.table(dat)
invisible(lapply(names(DT),function(.name) set(DT, which(is.infinite(DT[[.name]])), j = .name,value =NA)))

或者使用列号(如果有很多列可能会更快):

for (j in 1:ncol(DT)) set(DT, which(is.infinite(DT[[j]])), j, NA)

Timings

# some `big(ish)` data
dat <- data.frame(a = rep(c(1,Inf), 1e6), b = rep(c(Inf,2), 1e6), 
                  c = rep(c('a','b'),1e6),d = rep(c(1,Inf), 1e6),  
                  e = rep(c(Inf,2), 1e6))
# create data.table
library(data.table)
DT <- data.table(dat)

# replace (@mnel)
system.time(na_dat <- do.call(data.frame,lapply(dat, function(x) replace(x, is.infinite(x),NA))))
## user  system elapsed 
#  0.52    0.01    0.53 

# is.na (@dwin)
system.time(is.na(dat) <- sapply(dat, is.infinite))
# user  system elapsed 
# 32.96    0.07   33.12 

# modified is.na
system.time(is.na(dat) <- do.call(cbind,lapply(dat, is.infinite)))
#  user  system elapsed 
# 1.22    0.38    1.60 


# data.table (@mnel)
system.time(invisible(lapply(names(DT),function(.name) set(DT, which(is.infinite(DT[[.name]])), j = .name,value =NA))))
# user  system elapsed 
# 0.29    0.02    0.31 

data.table是最快的。使用sapply显着减慢速度。

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

从 R 数据框中清理“Inf”值 的相关文章

随机推荐

  • GPS信号强度计算

    我想使用 NET CF 显示 GPS 设备的信号栏 我能够读取 NMEA 数据并获取 SNR 信号 但它们是许多卫星 有些处于活动状态 有些处于不活动状态 信噪比各不相同 我考虑过获取总 SNR 的平均值 但它不会给出准确的值 因为三颗强信
  • 编辑摊牌:在句子末尾保留换行符

    编辑非所见即所得 LaTeX HTML 等 散文时 您可能希望在句子末尾添加换行符 这有几个优点 更容易重新排列句子 更容易注释句子 更容易发现连续 过长的句子 评论更方便on句子 例如 The following isn t strict
  • 是否可以在 Selenium 中捕获 POST 数据?

    我正在与Selenium http seleniumhq comWebDriver 工具 我想知道该工具是否提供了一种捕获提交表单时生成的 POST 数据的方法 我正在使用 django 测试框架来测试我的数据是否在后端正确处理 我想使用
  • 这是什么 ANT 版本?

    我是 java Eclipse 的新手 我安装了 eclipse 并使用它作为 IDE 来处理 JAVA 1 4 文件 我更改了代码并保存了它并想要运行 cntr F11 或调试 F11 每次我得到 select what to run A
  • WTForms:FormField 的 FieldList 无法加载嵌套数据

    我在 FieldList 内的 FormField 内有一个自定义字段 地点 class LocationForm Form id HiddenField id title StringField l Title Required loca
  • 加载特定 MIME 类型的本机客户端 Chrome 扩展

    我为 Google Chrome Web 浏览器创建了一个本机客户端应用程序 用于播放特殊类型的音频文件 伟大的 此时该部分效果很好 我已准备好进入下一阶段 与世界分享这个应用程序 我需要这部分的帮助 根据我的理解 分发此应用程序的最佳方法
  • 如何预加载 angular2 视图,以便在首次加载时不会闪烁白页?

    我正在用纯 JS 构建一个 Angular 2 应用程序 我的问题是 当我从一个页面更改到另一个页面时 它会闪烁白色页面 直到呈现新视图 仅当我第一次访问所有组件时 才会发生这种情况 如果我第二次转到相同的路线 则页面加载时不会出现白页 我
  • 如何调整分面 tmap 图中的分面行标签高度?

    我正在使用带有行和列的 tmap 包绘制多面地图 我无法调整行的分面标签的高度 这会导致分面标签在大于特定大小或旋转时被裁剪 我已经尝试调整所有tm layout 小组的论据包括panel label height panel label
  • Ansible 循环相关问题

    我有一个剧本 其中有多个角色和串行设置 因此它首先在一台机器上运行 然后在其余机器上运行 在其中一个角色中 我有以下任务 name getting dbnodes IP addresses local action shell echo f
  • WPF 组合框样式

    下面是我的 ComboBox 样式代码 想法是在 ComboBox 周围放置边框并重用该样式
  • 我无法运行 hello.py 并获取 SyntaxError: invalid syntax

    我对 Python 和整个编程都很陌生 很抱歉问了一个看似重复的问题 但是 我无法使用以下格式运行我自己的代码 C Users Archangel gt python hello py 这是 hello py 包含的内容 Define a
  • 递归或循环[重复]

    这个问题在这里已经有答案了 我有这个方法可以计算一些统计数据 public void calculateAverage int hour if hour 20 int data 0 int times 0 for CallQueue cq
  • “+”(加号)CSS 选择器是什么意思?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 例如 p p Some declarations 我不知道是什么 方法 这和仅仅定义样式
  • HTTPS 从根域(即 apex 或“naked”)重定向到“www”子域,而浏览器不会抛出异常?

    DNS A 记录要求将 IP 地址硬编码到应用程序的 DNS 配置中 哪个Heroku 建议避免 https devcenter heroku com articles apex domains Heroku 建议两种解决方法 使用在顶端支
  • 定期刷新 golang 中的通道

    我需要定期刷新频道的内容 我用 len 做到了这一点 我想知道是否有更好的方法来做到这一点 http play golang org p YzaI 2c F http play golang org p YzaI 2c F package
  • iOS 上的波形

    我正在寻找如何绘制声音幅度 I found http supermegaultragroovy com 2009 10 06 drawing waveforms http supermegaultragroovy com 2009 10 0
  • Preon 的 Java 或 C++ 等效项?

    Preon https github com preon preon是一个用于创建二进制编解码器的 Java 库 您只需在类的数据成员中放置关于它们与位字段的对应关系的注释 例如用于特定字段的位数 并且基于此类 该库构建一个 Codec 对
  • 如何在渲染后动态更改 ExtJS GridPanel viewconfig 上的 getRowClass 函数

    我有一个Ext grid Panel使用返回自定义类的函数 该自定义类用于通过重写 getRowClass 函数对网格中的行进行颜色编码 这很好用 但我想为用户提供更改网格着色标准的选项 在下面的示例中 我按 严重性 属性进行着色 但我想将
  • 如何使用 ruby​​ 日期常量 GREGORIAN、JULIAN、ENGLAND 甚至 ITALY

    因为大写 它们是常量 我很高兴学习 ruby 的日期助手 1 9 3p125 057 gt Date ABBR MONTHNAMES gt nil Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov De
  • 从 R 数据框中清理“Inf”值

    在 R 中 我有一个操作可以创建一些Inf当我转换数据框时的值 我想把这些Inf值转化为NA价值观 我的代码对于大数据来说很慢 有没有更快的方法 假设我有以下数据框 dat lt data frame a c 1 Inf b c Inf 3