我重新创建了一个(我认为)反映您的格式的数据框:
library(dplyr)
#> Warning: package 'dplyr' was built under R version 4.0.3
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
Stats.Fut <- tribble(
~names, ~overall, ~shooting,
"Lionel Messi",90,90,
"Cristiano Ronaldo",90,90,
"Neymar",90,90,
"Kevin De Bruyne",90,90,
"Robert Lewandowski",90,90,
"Sadio Mane",90,90,
"Mohamed Salah",90,90,
"Kylian Mbappe",90,90,
"Virgil van Dijk",90,90,
"Random Player 1",5,5,
"Random Player 2",6,6
)
Stats.Fut
#> # A tibble: 11 x 3
#> names overall shooting
#> <chr> <dbl> <dbl>
#> 1 Lionel Messi 90 90
#> 2 Cristiano Ronaldo 90 90
#> 3 Neymar 90 90
#> 4 Kevin De Bruyne 90 90
#> 5 Robert Lewandowski 90 90
#> 6 Sadio Mane 90 90
#> 7 Mohamed Salah 90 90
#> 8 Kylian Mbappe 90 90
#> 9 Virgil van Dijk 90 90
#> 10 Random Player 1 5 5
#> 11 Random Player 2 6 6
基础 R 解决方案
@EricoPatto 的答案基本上是正确的,除了 && 返回一个布尔值,而 & 返回一个布尔值向量,它将选择正确的名称,如下所示:
Stats.Fut[, 1][Stats.Fut[, 2] >= 90 & Stats.Fut[, 3] >= 90]
#> [1] "Lionel Messi" "Cristiano Ronaldo" "Neymar"
#> [4] "Kevin De Bruyne" "Robert Lewandowski" "Sadio Mane"
#> [7] "Mohamed Salah" "Kylian Mbappe" "Virgil van Dijk"
要获得这一点,OP 只需替换正确的列索引,如下所示:
Stats.Fut[, 8][Stats.Fut[, 1] >= 90 & Stats.Fut[, 3] >= 90]
dplyr 解决方案
执行此操作的更好方法 (IMO) 是使用列名而不是索引。它使代码更易于阅读,并确保即使列重新排序,代码仍将运行。使用 dplyr 和列名,您可以使用以下方法获得相同的解决方案:
Stats.Fut %>%
filter(overall >= 90,
shooting >= 90) %>%
select(names)
#> # A tibble: 9 x 1
#> names
#> <chr>
#> 1 Lionel Messi
#> 2 Cristiano Ronaldo
#> 3 Neymar
#> 4 Kevin De Bruyne
#> 5 Robert Lewandowski
#> 6 Sadio Mane
#> 7 Mohamed Salah
#> 8 Kylian Mbappe
#> 9 Virgil van Dijk
这里的filter 语句实际上是说只返回总分 >= 90 并且投篮得分 >= 90 的行。
这会将名称作为单列小标题返回(基本上是增强的 data.frame)。如果您需要将名称作为向量,请使用 pull 而不是 select,如下所示:
Stats.Fut %>%
filter(overall >= 90,
shooting >= 90) %>%
pull(names)
#> [1] "Lionel Messi" "Cristiano Ronaldo" "Neymar"
#> [4] "Kevin De Bruyne" "Robert Lewandowski" "Sadio Mane"
#> [7] "Mohamed Salah" "Kylian Mbappe" "Virgil van Dijk"