which.max()按组计算,但在数据框中输出。

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

有这样一个数据框架,由(一个例子)给出。

df <- read.table(header = TRUE, text = 'Group   Utility
 A      12 
 A      10
 B      3
 B      5
 B      6
 C      1
 D      3
 D      4')

我想使用任何命令(我一直在尝试迭代的 which.max() 无济于事),以获得数据集中的另外一条记录,比如说 choice 谓之 Value 是给定组的最大值,由 Group 元素。这个表就会是这样的。

Group Utility Choice
A     12      1
A     10      0
B     3       0
B     5       0
B     6       1
C     1       1
D     3       0
D     4       1
r which
2个回答
4
投票

你可以用dplyr试试

library(dplyr)

df %>%
  group_by(Group) %>%
  mutate(Choice = ifelse(Utility == max(Utility), 1, 0)) %>%
  ungroup()

产量

# A tibble: 8 x 3
  Group Utility Choice
  <fct>   <int>  <dbl>
1 A          12      1
2 A          10      0
3 B           3      0
4 B           5      0
5 B           6      1
6 C           1      1
7 D           3      0
8 D           4      1

2
投票

一个单行的基础R方案。

df$Choice <- with(df, ave(Utility, Group, FUN = function(x) +(x == max(x))))
df
#  Group Utility Choice
#1     A      12      1
#2     A      10      0
#3     B       3      0
#4     B       5      0
#5     B       6      1
#6     C       1      1
#7     D       3      0
#8     D       4      1

1
投票

一个选项与 data.table

library(data.table)
setDT(df)[, +(Utility == max(Utility)), Group]
© www.soinside.com 2019 - 2024. All rights reserved.