如何根据R中数据帧的最大值从数据帧返回行?

时间:2015-04-16 10:55:44

标签: r dataframe max

假设我有一个数据框,如下所示。我在Stackoverflow上发现的大多数建议都旨在从一个列中获取最大值,然后返回行索引。 我想知道是否有办法通过扫描两个或更多列的最大值来返回数据框的行索引。

总结一下,从下面的例子中,我想得到一行:

11 building_footprint_sum 0.003 0.470

保存数据框的最大值

+----+-------------------------+--------------------+-------------------+
| id |        plot_name        | rsquare_allotments | rsquare_block_dev |
+----+-------------------------+--------------------+-------------------+
|  6 | building_footprint_max  | 0.002              | 0.421             |
|  7 | building_footprint_mean | 0.002              | 0.354             |
|  8 | building_footprint_med  | 0.002              | 0.350             |
|  9 | building_footprint_min  | 0.002              | 0.278             |
| 10 | building_footprint_sd   | 0.003              | 0.052             |
| 11 | building_footprint_sum  | 0.003              | 0.470             |
+----+-------------------------+--------------------+-------------------+

有没有一种相当简单的方法来实现这一目标?

2 个答案:

答案 0 :(得分:2)

您正在寻找矩阵达到最大值的行索引。您可以使用which()选项{/ 1}}来执行此操作:

arr.ind=TRUE

所以在这种情况下,你需要第1行。(你可以放弃> set.seed(1) > foo <- matrix(rnorm(6),3,2) > which(foo==max(foo),arr.ind=TRUE) row col [1,] 1 2 输出。)

如果你走这条路,请注意浮点运算和col(参见FAQ 7.31)。最好这样做:

==

使用适当的小值代替0.01。

答案 1 :(得分:0)

尝试使用pmax

?pmax    
pmax and pmin take one or more vectors (or matrices) as arguments and
return a single vector giving the ‘parallel’ maxima (or minima) of the vectors.

我建议分两步完成这个步骤

# make a new column that compares column 3 and column 4 and returns the larger value
> df$new <- pmax(df$rsquare_allotments, df$rsquare_block_dev)

# look for the row, where the new variable has the largest value
> df[(df$new == max(df$new)), ][3:4]

考虑如果最大值出现多次,您的结果将有多行