我有一个包含组(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 的30 31 27
1 2 3
8.00 9.00 9.15
是最大值的标识。
答案 0 :(得分:2)
以下是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
答案 1 :(得分:1)
使用基本R功能的解决方案。
sapply(sort(unique(Gp)), function(i) {
ind <- which(Gp == i)
ind[which.max(y[ind])]
})
# [1] 30 31 27
如果需要,下面打印Gp以便使用。 (排序功能是可选的)
sapply(sort(unique(Gp)), function(i) {
ind <- which(Gp == i)
c(Gp = i, max_pos = ind[which.max(y[ind])])
})
# [,1] [,2] [,3]
# Gp 1 2 3
# max_pos 30 31 27