最大群体 - 我的价值观属于哪些因素?

问题描述 投票:1回答:2

我有一个包含两个组和值的数据框。我必须找到max值的一组(group)并发现,我的max对应于第二组(dist)的值。

# example
df<-data.frame(group = rep(c("a", "b"), each = 5),
               val = 1:10,
               dist = rep(c("NR", "b1"), 5))


        > df
       group val dist
1      a   1   NR
2      a   2   b1
3      a   3   NR
4      a   4   b1
5      a   5   NR
6      b   6   b1
7      b   7   NR
8      b   8   b1
9      b   9   NR
10     b  10   b1

我可以按组获取最大值:

aggregate(val ~ group, df, max)

  group val
1     a   5
2     b  10

或者通过tapply

tapply(df$val, df$group, max)

但我需要知道,在max所在的“地区”。

  group val  dist
1     a   5   NR
2     b  10   b1

怎么做到这一点?

r max subset
2个回答
3
投票

我们可以slice为每个'组'有max'val'的行

library(dplyr)
df %>%
  group_by(group) %>%
  slice(which.max(val))

如果存在最大值的关联,则进行比较并对行进行filter

df %>%
  group_by(group) %>%
  filter(val == max(val))

或者来自avebase R

df[with(df, val == ave(val, group, FUN= max)),]
#    group val dist
#5      a   5   NR
#10     b  10   b1

1
投票
df<-data.frame(group = rep(c("a", "b"), each = 5),
               val = 1:10,
               dist = rep(c("NR", "b1"), 5))

df1 <- split(df, df$group)
df2 <- lapply(df1, function(i) i[which(i$val== max(i$val)),] )
df3 <- do.call(rbind, df2)
© www.soinside.com 2019 - 2024. All rights reserved.