当前位置: 首页 > 知识库问答 >
问题:

带有na.rm=TRUE参数的data.table和pmin

王兴腾
2023-03-14

我试图使用pmin函数和数据计算跨行的最小值。表(类似于data.table中的post逐行操作和更新),但使用类似于<code>with=FALSE<code>语法和<code>na的列字符列表。rm=TRUE参数。

DT <- data.table(x = c(1,1,2,3,4,1,9), 
                 y = c(2,4,1,2,5,6,6),
                 z = c(3,5,1,7,4,5,3),
                 a = c(1,3,NA,3,5,NA,2))

> DT
   x y z  a
1: 1 2 3  1
2: 1 4 5  3
3: 2 1 1 NA
4: 3 2 7  3
5: 4 5 4  5
6: 1 6 5 NA
7: 9 6 3  2

我可以直接使用列计算跨行的最小值:

DT[,min_val := pmin(x,y,z,a,na.rm=TRUE)]

> DT
   x y z  a min_val
1: 1 2 3  1       1
2: 1 4 5  3       1
3: 2 1 1 NA       1
4: 3 2 7  3       2
5: 4 5 4  5       4
6: 1 6 5 NA       1
7: 9 6 3  2       2

但是,我正在尝试对自动生成的大量列执行此操作,并且我希望能够对存储在col_names变量< code>col_names中的任意列列表执行此操作

我可以这样做:

DT[, col_min := do.call(pmin,DT[,col_names,with=FALSE])]

但它给了我NA值。我不知道如何将 na.rm=TRUE 参数传递到 do.call 中。我尝试过将函数定义

DT[, col_min := do.call(function(x) pmin(x,na.rm=TRUE),DT[,col_names,with=FALSE])]

但这给了我一个错误。我还尝试将参数作为列表中的附加元素传入,但我认为pmin(或do.call)在列名的DT非标准评估和参数之间混淆了。

有什么想法吗?

共有1个答案

柳飞鸾
2023-03-14

如果我们需要获取整个数据集每一行的最小值,请使用上的pmin。SD将na.rm=TRUE连接为列表。SD用于do.call(pmin

DT[, col_min:= do.call(pmin, c(.SD, list(na.rm=TRUE)))]
DT
#   x y z  a col_min
#1: 1 2 3  1       1
#2: 1 4 5  3       1
#3: 2 1 1 NA       1
#4: 3 2 7  3       2
#5: 4 5 4  5       4
#6: 1 6 5 NA       1
#7: 9 6 3  2       2

如果我们只想对存储在“col_names”中的列名子集执行此操作,请使用< code >。SDcols

DT[, col_min:= do.call(pmin, c(.SD, list(na.rm=TRUE))), 
                .SDcols= col_names]
 类似资料:
  • 问题内容: 我一直在这里,这里和这里阅读有关使用优势的信息 如果我理解正确,那么JDBC将把尽可能多的查询打包到单个网络包中,从而降低了网络开销。我对吗? 然后引起我注意的是,在MySQL服务器中为定义的值可能会导致查询问题(查询未在服务器上执行)。 所以我的第二个问题是,JDBC是否知道分配给它的值,并因此使数据包小于为其定义的值,或者这是开发人员必须考虑的事情? 如果我理解不对,请也通知我。

  • 问题内容: 渲染时捕获到异常: 找不到带有参数’()’和关键字参数’{}’的’products.views.’filter_by_led’。 我能够从shell成功导入,并且可以正常工作,因此路径应该正确。 这是urls.py: 这是生成错误的地方: 我不明白,因为这可以在同一个文件中正常工作: 这是函数定义: 我不明白为什么Django会认为该函数无法为该函数找到Reverse。 我删除了所有文

  • 问题内容: 我正在提交一个带有file_field的form_for。提交带有表单的表单时,控制器将响应一个.js文件,该文件将被执行。 file_field是可选的。 当我上传文件时,js文件会在一个新文档中打开(作为简单文本文件),并且不会执行js。当我不上传任何文件时,响应div被更新。我希望在响应div中通知更新成功或与文件上传无关的失败消息。 出于某些安全原因,是否可以这样做?对于想要能

  • 问题内容: 渲染时捕获到异常: 找不到带有参数和关键字参数的。 我能够从shell 成功导入,并且可以正常工作,因此路径应该正确。 这是: 这是生成错误的地方: 我不明白,因为这可以在同一个文件中正常工作: 这是函数定义: 我不明白为什么Django会认为该函数无法为该函数找到Reverse。 我删除了所有文件,然后重新启动了Apache。 我究竟做错了什么? 问题答案: 我想到的三件事是: 只是

  • 问题内容: 我有这样的网址格式: 它在浏览器中可以正常工作,但是当我在外壳中执行此操作时,可以进行测试: 我感到恐惧: 我在这里想念什么? 问题答案: 你必须指定

  • 我正在编写一个非常简单的函数来汇总 data.tables 的列。我一次向函数传递一列,然后执行一些诊断以找出汇总选项,然后进行汇总。我在 data.table 中执行此操作,以允许一些非常大的数据集。 所以,我使用在列中传递以进行总结,并使用在data.table表达式的部分中。因为我一次传递一列,所以我没有使用lapplication。我发现有些函数有效,而另一些无效。下面是我正在使用的测试数