r - 根据组的最大变量的标识符

标签 r dataframe max

我有一个数据框,其中包含变量的组 (Gp) 和值 (y)。

我的数据

y <- c(5 , 0.22 , 0.23 , 0.17 , 0.36 , 3.33 , 5.30 , 0.39 , 0.35 ,
0.27 , 0.20 , 0.22 , 0.24 , 0.16 , 0.36 , 0.30 , 0.31 , 0.39 , 0.33 , 0.25 , 0.23 , 0.13 , 0.16 , 6.18 ,  0.20 ,1, 9.15 , 0.09 , 0.18 , 8 , 9 , 0.14 , 3 , 0.18 , 0.22 , 0.16 , 0.14 , 0.11 , 0.18 , 4 , 0.30 ,
0.36 , 0.40 , 0.42 , 8 , 0.23 , 0.25 , 0.30 ,  0.27 , 0.15 , 0.29 , 0.36 , 0.38 , 0.42 , 0.28 , 0.23 , 0.26 , 0.29 , 0.24 , 0.17 , 0.24 , 0.14 , 0.17 , 0.16 , 0.15 , 6 , 0.19 , 0.15 , 0.16 , 0.3) 

Gp <- c(1,2,2,1,2,1,2,2,2,2,3,2,1,2,2,2,2,2,2,2,1,2,2,2,2,1,3,2,2,1,2,2,3,2,
           2,2,2,1,2,3,1,2,2,1,2,2,2,2,3,2,2,1,2,3,2,2,3,2,2,2,3,2,2,2,3,2,2,2,2,3) 

tab <- data.frame(x=as.factor(Gp), y)

tab

   x    y

1  1 5.00

2  2 0.22

3  2 0.23

4  1 0.17

5  2 0.36

我想根据组获得最大变量的标识符。我尝试过:

with(tab,tapply(y,x,max))  

1 2 3

8.00 9.00 9.15

预期结果:

30 31 27

1 2 3

8.00 9.00 9.15

其中 30 、 31 和 27 是最大值的标识符。

最佳答案

这是一个关于dplyr的想法,

library(dplyr)

tab %>% 
 mutate(index = row_number()) %>% 
 group_by(x) %>%  
 filter(y == max(y))

这给出了,

# A tibble: 3 x 3
# Groups:   x [3]
  x         y index
  <fct> <dbl> <int>
1 3      9.15    27
2 1      8.00    30
3 2      9.00    31

关于r - 根据组的最大变量的标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49920578/

相关文章:

r - 从 aov() 中提取残差

r - 根据条件更改分组中的值

scala - 使用scala在Spark中转置没有聚合的DataFrame

r - 使用 plyr daply 将数据帧转换为矩阵

c++ - 同时最小值和最大值

r - 如何使用 RCurl *after* 服务器身份验证下载大型二进制文件

r - purrr映射等效于嵌套的for循环

mysql - SQL:加入组函数

r - 将存储在列表中的 data.frames 分成相等的部分

c - 我的 find-biggest-number 递归函数返回一个递减值