使用 dplyr 对多列求和时忽略 NA

2023-12-14

我正在对多列进行求和,其中一些列不适用。我在用

 dplyr::mutate

然后写出各列的算术和以获得总和。但这些列有 NA,我想将它们视为零。我能够让它与 rowSums 一起使用(见下文),但现在使用 mutate。使用 mutate 可以使其更具可读性,但也可以允许我减去列。示例如下。

require(dplyr)
data(iris)
iris <- tbl_df(iris)
iris[2,3] <- NA
iris <- mutate(iris, sum = Sepal.Length + Petal.Length)

如何确保上述表达式中 Petal.Length 中的 NA 被处理为零?我知道使用 rowSums 我可以做类似的事情:

iris$sum <- rowSums(DF[,c("Sepal.Length","Petal.Length")], na.rm = T)

但使用 mutate 时,甚至可以更轻松地设置 diff = Sepal.Length - Petal.Length。 使用 mutate 来完成此任务的建议方法是什么?

请注意,该帖子与下面的 stackoverflow 帖子类似。

使用 dplyr 对多列求和

减去多个列并忽略 NA


你的问题rowSums是参考DF(这是未定义的)。这有效:

mutate(iris, sum2 = rowSums(cbind(Sepal.Length, Petal.Length), na.rm = T))

为了区别,你当然可以使用否定:rowSums(cbind(Sepal.Length, -Petal.Length), na.rm = T)

一般的解决方案是使用ifelse或类似将缺失值设置为 0(或其他适当的值):

mutate(iris, sum2 = Sepal.Length + ifelse(is.na(Petal.Length), 0, Petal.Length))

比效率更高ifelse将是一个实现coalesce, 请参阅此处的示例。这使用了上一个链接中@krlmlr的答案(请参阅底部的代码或使用基米斯克封装).

mutate(iris, sum2 = Sepal.Length + coalesce.na(Petal.Length, 0))

为了替换数据集范围内的缺失值,有replace_na in the tidyr包裹。


@krlmlr 的coalesce.na, 如这里找到的

coalesce.na <- function(x, ...) {
  x.len <- length(x)
  ly <- list(...)
  for (y in ly) {
    y.len <- length(y)
    if (y.len == 1) {
      x[is.na(x)] <- y
    } else {
      if (x.len %% y.len != 0)
        warning('object length is not a multiple of first object length')
      pos <- which(is.na(x))
      x[pos] <- y[(pos - 1) %% y.len + 1]
    }
  }
  x
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 dplyr 对多列求和时忽略 NA 的相关文章

随机推荐

  • Android 如何将标题布局重用为 ListView 中的空视图

    在我的项目的整个生命周期中 我一直在努力解决这个问题 我的项目中有很多列表 其中大多数都有标题 我一直在制作一个单独的布局文件并使用 addHeaderView 将其添加到列表中 问题是当数据 ArrayList 在我的例子中 为空时 标题
  • Java 有没有办法将整数转换为其序数名称?

    我想取一个整数并得到它的序数 即 1 gt First 2 gt Second 3 gt Third 如果你同意1st 2nd 3rd等等 这里有一些简单的代码可以正确处理任何整数 public static String ordinal
  • Msbuild 和 SVN 更新

    我想编写一个简单的任务 它将更新并将夜间构建的源代码提交到 SVN 我在 msbuildtasks tigris org 页面上 下载了 dll 但我不知道如何编写它 您能提供一些基本样本吗 下面是一个示例 取自 MSBuild 社区任务构
  • c# 在运行时创建未知的泛型类型

    因此 我有一个泛型类 它可能需要在其自己的方法内使用不同类型的泛型创建自身的实例 其类型是通过反射获得的 这很重要 因为这个存储库映射T到数据库表 这是我正在写的 ORMish 并且如果代表的类T有一个代表另一个表的集合 我需要能够实例化它
  • 如何关闭所有弹出窗口?

    我有多个 444 popups打开我的map 我试过这个 leaflet popup close button each function index leaflet popup close button index click 但这样一来
  • 如何在Python字典中为一个键拥有多个值?

    我遇到的情况是 同一个键可能有不同的与之关联的字符串 例如flow 和 Wolf 都有相同的字符 如果我对它们进行排序并将它们用作字典中的键 我想将原始字符串作为值 我在 python 字典中尝试过 d d flow flow d flow
  • 为什么 hibernate 在 session.get 方法中强制序列化

    我看到 hibernate 的 session get 和 load 方法只接受可序列化的对象 根据我对hibernate的理解 它会生成一条SQL语句并将其发送到DBMS 它永远不需要通过网络发送 java 对象 为什么 hibernat
  • 如何像 iOS 7 iPad App Store 那样同时翻转和放大 UIView?

    当您点击应用程序图标时 iPad iOS 7 App Store 有一个非常酷的动画 当图标较小时 来自特色列表 而不是搜索结果 这是它的实际操作图片 基本上 图标会同时翻转并扩大尺寸 后面有渐变 内容视图更小 到目前为止 我有一个自定义的
  • 如何在运行时更改JTabbedPane的背景颜色?

    我发现了很多改变背景颜色的例子JTabbedPane使用任一setBackgroundAt and UIManager put JTabbedPane 但是 我想创建一个onclick复选框上的事件 当您选择它时 背景颜色将更改为绿色 当您
  • Polars 将 array[string] 列聚合到 set[str] 中

    我有极地数据框 df pl DataFrame col1 aaa aaa bbb ccc ccc ddd ddd ddd ddd ddd col2 a a a a col3 x x y y 我想将 col2 col3 分组并将 col1 聚
  • Javascript从亚马逊s3存储桶下载文件?

    我试图从 Amazon S3 上的存储桶下载文件 我想知道是否可以编写一个 JavaScript 来从存储桶下载这样的文件 我在谷歌上搜索 但找不到任何可以帮助我做到这一点的资源 需要考虑的一些步骤是 对 Amazon S3 进行身份验证
  • 如何从命令行检查特定的 Subversion 修订版?

    我想签出文件夹的特定版本颠覆使用命令行 我没有看到用于指定修订号的选项TortoiseProc exe TortoiseProc exe command checkout
  • 如何更改 Android 中的代理设置(尤其是 Chrome)[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 您能帮我一下吗 是否可以在 Android 中设置代理设置 尤其是在 Chrome 中 我在测试期间必须更改 Android 上的 IP 或者有什么软件可以帮助我解决这个问题 找到了
  • 如何连接mysql和Basex?

    我有一个使用 Mysql 作为数据库的应用程序 它使用了大量的 XML HTML 我想在 BaseX 中处理 mysql 数据并通过它更新数据库 有没有简单的方法连接数据库 我检查了http docs basex org wiki SQL但
  • HTTP.sys 请求队列和 IIS 应用程序池之间的关系

    我从中读到了这篇文章 HTTP sys 为每个工作进程维护一个请求队列 它将 HTTP 请求发送到工作进程的请求队列 该工作进程为所请求的应用程序所在的应用程序池提供服务 对于每个应用程序 HTTP sys 维护具有一个条目的 URI 命名
  • Javascript读取大文件失败

    JSON 文件大小为 6 GB 当用下面的代码读取时 var fs require fs var contents fs readFileSync large file txt toString 它有以下错误 buffer js 182 t
  • 如何用新行显示阅读提示

    我在用着read内置来读取变量 但我想让输入出现在下一行 即提示符输出一个新行 但两者都不起作用 read p Please input n name Please input n read p Please input n name Pl
  • java:如何使用 .txt 中的数据创建多个数组

    所以这是我必须编写的第一个真正的java程序 我对java也很陌生 该程序必须使用 2 个命令行参数运行 这些参数假定为 x 和 y 坐标 然后确定坐标所在的市和县 为此 我想使用 绕数 但是在开始程序的这些部分之前 我首先需要创建并填充不
  • 如何在 solr4 中对存储在其他服务器上的 XML 文件建立索引

    我将所有 XML 文件存储到另一台服务器上 并且我已在不同服务器上安装和配置 SOLR 我如何将这些 XML 文件索引到 SOLR 我已经检查过 nutch 但它的主要目的是抓取 html 页面并为其建立索引 我不需要爬行 我将所有这些文件
  • 使用 dplyr 对多列求和时忽略 NA

    我正在对多列进行求和 其中一些列不适用 我在用 dplyr mutate 然后写出各列的算术和以获得总和 但这些列有 NA 我想将它们视为零 我能够让它与 rowSums 一起使用 见下文 但现在使用 mutate 使用 mutate 可以