r - R中多行取一列的最大值

标签 r datatable max grouping

我有 3 列 xyz 数据。这些点在 x 和 y 方向上规则间隔。我想找出 x 每一步的 z 最大值。 我能够对我专门指定的一个“x”值执行此操作,但由于还有更多值,我通过使用函数 unique()(vecx) em> 里面包含所有可能的值。不幸的是,我无法正确分配它,因为只选择了与 z 的总体最大值匹配的值(这是合乎逻辑的)。我不确定是否有一个简单的解决方案,只需对 x 值使用分组函数而不是我使用向量的方式?

xyzmax <- xyz[x %in%vecx ][which.max(z)]

这是数据的简短预览(x、y 和 z 是 xyz 中列的标签:

     x        y    z
  1. 1810.0 5932.200 4767
  2. 1810.0 5982.108 4746
  3. 1810.0 6032.015 4717
  4. 1856.5 5483.031 4736
  5. 1856.5 5532.938 4738
  6. 1856.5 5582.846 4746
  7. 1856.5 5632.754 4742
  8. 1856.5 5682.662 4752
  9. 1856.5 5732.569 4756

运行代码后应该是这样的:

         x        y       z
  1. 1810.0 5932.200 4767
  2. 1856.5 5732.569 4756

由于 x 值有数百个,并且这些值随着点网格的分辨率而变化。这就是为什么我不热衷于手动输入它们或为单个值创建表格,这在类似的问题中完成。我刚刚开始使用 R,非常感谢任何形式的帮助!

最佳答案

数据表

library(data.table)
setDT(df)
df[, .SD[which.max(z)], by = x]

#         x        y    z
# 1: 1810.0 5932.200 4767
# 2: 1856.5 5732.569 4756

dplyr

library(dplyr)
df %>% 
  group_by(x) %>% 
  slice(which.max(z))

使用的数据:

df <- fread("
   x        y    z
1810.0 5932.200 4767
1810.0 5982.108 4746
1810.0 6032.015 4717
1856.5 5483.031 4736
1856.5 5532.938 4738
1856.5 5582.846 4746
1856.5 5632.754 4742
1856.5 5682.662 4752
1856.5 5732.569 4756
")

关于r - R中多行取一列的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51216312/

相关文章:

使用 splitstring 对 R 中的字符串重新排序

c# - 如何从已排序的 DataTable 中获取前 10 行?

javascript - YUI 数据表数据源是否适用于所有有效的 JSON 对象?

excel - 如何对多个组的单个最大值求和?

regex - 范围 0-200.0000(包括 0 和 200)的正则表达式

c - 不使用数组从 n 个数中取最大的三个数

r - 使用 Softmax 转换输出激活会产生相似的值

r - 如何用R数据框中的NA替换空字符串?

r - 如何按列对摘要的输出进行排序?

javascript - 数据表页面加载问题