首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在数据帧的每一列中查找最接近于零的值-R

在数据帧的每一列中查找最接近于零的值-R
EN

Stack Overflow用户
提问于 2016-11-18 15:53:52
回答 3查看 5.1K关注 0票数 1

我有一个有几百列的数据框架,每个列都有数字数据。

对于每一列,我想用最接近于零的值来标识单元格的值,而不是正数。

例如:

代码语言:javascript
复制
X = c(-1,-2,-3,-4,-5,-6,-7,-8,-9,-10)
Y = c(5,4,3,2,1,0,-1,-2,-3,-4)
Z = c(-11,-12,-13,-14,-15,-16,-17,-18,-19,-20)

df <- data.frame(X, Y, Z)

我想要一些函数(有趣)返回这个向量:

代码语言:javascript
复制
fun(df)

[1] -1 0 -11

我想我可以应用函数,甚至可能是循环,或者管道?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-11-18 17:34:58

任择议定书要求

数值最接近于零的单元格,而不是正数。

(正如@Heroka所指出的),返回的值向量与预期结果相同。

这可以使用data.table来实现。

代码语言:javascript
复制
library(data.table)
setDT(df)[, unlist(lapply(.SD, function(x) max(x[x<=0])))]

  X Y   Z
 -1 0 -11

解释

  • setDT(df)通过引用将data.frame df强制到data.table,即不复制。
  • 对于每一列,返回不为正的最大值。
  • unlist()将生成的data.table强制到(命名的)向量。
票数 2
EN

Stack Overflow用户

发布于 2016-11-18 15:56:33

我们遍历列(sapply(...)),得到绝对值,用which.min找到最小值的索引,并将列的值子集。

代码语言:javascript
复制
unname(sapply(df, function(x) x[which.min(abs(x))]))
#[1]  -1   0 -11
票数 12
EN

Stack Overflow用户

发布于 2016-11-18 16:24:23

这里有一个使用mapplysapply的替代方案。它可能比akrun的答案效率更低,因为它创建了至少一个额外的data.frame副本。

代码语言:javascript
复制
mapply("[", df, sapply(df*df, which.min), USE.NAMES=FALSE)
[1]  -1   0 -11

sapply(df*df, which.min)将找到最小值的索引。这些输入到mapply和data.frame以产生子设置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40681235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档