在r的条件下在另一列上找到最大列值

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

我有棒球选手信息的数据框:

        playerID nameFirst nameLast bats throws yearID stint teamID lgID   G  AB   R   H X2B X3B HR RBI SB CS BB  SO IBB
81955  rolliji01     Jimmy  Rollins    B      R   2007     1    PHI   NL 162 716 139 212  38  20 30  94 41  6 49  85   5
103358 wilsowi02    Willie   Wilson    B      R   1980     1    KCA   AL 161 705 133 230  28  15  3  49 79 10 28  81   3
93082  suzukic01    Ichiro   Suzuki    L      R   2004     1    SEA   AL 161 704 101 262  24   5  8  60 36 11 49  63  19
83973  samueju01      Juan   Samuel    R      R   1984     1    PHI   NL 160 701 105 191  36  19 15  69 72 15 28 168   2
15201   cashda01      Dave     Cash    R      R   1975     1    PHI   NL 162 699 111 213  40   3  4  57 13  6 56  34   5
75531  pierrju01      Juan   Pierre    L      L   2006     1    CHN   NL 162 699  87 204  32  13  3  40 58 20 32  38   0
       HBP SH SF GIDP   average
81955    7  0  6   11 0.2960894
103358   6  5  1    4 0.3262411
93082    4  2  3    6 0.3721591
83973    7  0  1    6 0.2724679
15201    4  0  7    8 0.3047210
75531    8 10  1    6 0.2918455

我想返回击球平均值('AB')大于100的击球平均值('平均值')列的最大值。平均值列中也有'NaN'。

r dataframe
1个回答
0
投票

如果要返回两个条件均为TRUE的整个行,则可以执行以下操作。

library(tidyverse)

data <- tibble(
  AB = sample(seq(50, 150, 10), 10),
  avg = c(runif(9), NaN)
)

data %>%
  filter(AB >= 100) %>%
  filter(avg == max(avg, na.rm = TRUE))

第一个过滤器只保留AB大于或等于100的行,第二个过滤器选择最大的行。如果只想获得最大值,可以执行以下操作:

data %>%
  filter(AB >= 100) %>%
  summarise(max = max(avg, na.rm = TRUE))
© www.soinside.com 2019 - 2024. All rights reserved.