我有 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
- 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
运行代码后应该是这样的:
x y z
- 1810.0 5932.200 4767
- 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/