迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

在 R 中的数据帧中按行查找最大绝对值

作者:迹忆客 最近更新:2023/03/21 浏览次数:

本文将解释如何在 R 中的数据框中按行查找最大绝对值。

使用自定义函数在 R 数据框中按行查找最大绝对值

可以使用我们在以下代码片段中实现的 abs_max 函数在数据帧的每一行中查找最大绝对值并将它们构造为向量。我们假设数据框包含数字和非数字值,并初始化一个名为 df1 的对象以进行验证。abs_max 块中调用的第一个函数是 Filter。它需要两个参数。第一个表示应用于作为第二个参数传递的向量的每个元素的一元函数,而 Filter 提取评估 true 的元素。在这种情况下,Filter 采用 is.numeric 函数从数据框中仅提取数值。

然后,inherits 函数用于检查 abs_max 的参数是否为 tbl_df 类型,如果是,则将其转换为矩阵。请注意,tbl_df 类通常称为 tibble,并由一个单独的包提供相同的名称,我们将在下一个示例中使用它。replace 函数被调用以用它们的绝对值替换负值,用 -Inf 替换 NA 类型。接下来,max.col 被调用并提取每行中最大值的位置向量。最后,使用 cbind 函数获取结果值。我们可以将后一个对象作为名为 abs_max 的单独列附加到现有数据框中,如以下代码示例所示。

abs_max <- function(data) {
  tmp <- Filter(is.numeric, data)
  if(inherits(data, "tbl_df")) {
    tmp <- as.matrix(tmp)
  }
  tmp[cbind(1:nrow(tmp), max.col(replace(x <- abs(tmp), is.na(x), -Inf)))]
}

df1 <- data.frame(
  id = c("foo", "bar", "goo"),
  val_a =  c(-51, 15, 19),
  val_b = c(NA, 122, 35),
  val_c = c(10, -23, 4)
)

df1$abs_max = abs_max(df1)
df1

输出:

id val_a val_b val_c abs_max
1 foo   -51    NA    10     -51
2 bar    15   122   -23     122
3 goo    19    35     4      35

或者,可以使用相同的函数传递 tibble 对象类型并处理其行。请注意,tibbles 将在 abs_max 函数中转换为矩阵,但其余函数代码的工作方式与在数据帧上的工作方式相同。

library(tibble)

abs_max <- function(data) {
  tmp <- Filter(is.numeric, data)
  if(inherits(data, "tbl_df")) {
    tmp <- as.matrix(tmp)
  }
  tmp[cbind(1:nrow(tmp), max.col(replace(x <- abs(tmp), is.na(x), -Inf)))]
}

tb1 <- tibble(
  id = c("foo", "bar", "goo"),
  val_a =  c(-51, 15, 19),
  val_b = c(NA, 122, 35),
  val_c = c(10, -23, 4)
)

tb1$abs_max = abs_max(tb1)
tb1

输出:

# A tibble: 3 x 5
  id    val_a val_b val_c abs_max
  <chr> <dbl> <dbl> <dbl>   <dbl>
1 foo     -51    NA    10     -51
2 bar      15   122   -23     122
3 goo      19    35     4      35

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

R 中具有多个条件的函数向量化

发布时间:2023/03/21 浏览次数:64 分类:编程语言

一项常见的数据分析任务是根据同一行的其他列使用一个或多个条件创建或更新数据框列。 如果我们尝试使用 if 语句来执行此操作,则只会使用第一行来测试条件,并且会根据该行更

在 R 中读取 xlsx 文件

发布时间:2023/03/21 浏览次数:66 分类:编程语言

在这篇文章中,你将会了解到两个在 R 中读取 xlsx 文件的最完整和最容易使用的库:readxl 和 openxlsx。

清理 R 的环境

发布时间:2023/03/21 浏览次数:178 分类:编程语言

在本教程中,你将学习如何在 R 中编写一个函数,在不需要重新启动 R 的情况下清除环境。

在 R 中注释掉多行

发布时间:2023/03/21 浏览次数:63 分类:编程语言

在本文中,你将学习如何在 R 中注释出多行,而不必在每一行的开头手动写一个#字符来注释。

在 R 中清除内存

发布时间:2023/03/21 浏览次数:197 分类:编程语言

在本教程中,你将学习如何清除 R 系统占用的内存,而不必重新启动它或重新启动它运行的计算机。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便