如何只保留在 R 的特定列中具有最高值的行
how to keep only rows that have highest value in certain column in R
我有一个如下所示的数据框:
library(tidyverse)
df <- tribble (
~Species, ~North, ~South, ~East, ~West,
"a", 4, 3, 2, 3,
"b", 2, 3, 4, 5,
"C", 2, 3, 3, 3,
"D", 3, 2, 2, 2
)
我想筛选出最高值的物种,例如北。
在这种情况下,将选择物种 A 和 D。预期输出将是一个只有物种 A 和 D 的 df。
我使用了这样的解决方法:
df %>%
group_by(species) %>%
mutate(rowmean = mean(North:West) %>%
filter(North > rowmean) %>%
ungroup() %>%
select(!rowmean)
这似乎是一个简单任务的大量代码!
但是,我找不到一种更代码友好的方法。是否有一种(最好是 tidyverse)方法以更干净的方式执行此任务?
亲切的问候
更简单的方法是在 base R
中使用 max.col
。 Select 数字列。获取值为 max
的每一行的列索引。检查它是否等于 1,即第一列(因为我们只从第二列开始选择)和 subset
行
subset(df, max.col(df[-1], 'first') == 1)
# A tibble: 2 x 5
# Species North South East West
# <chr> <dbl> <dbl> <dbl> <dbl>
#1 a 4 3 2 3
#2 D 3 2 2 2
如果是基于rowwise mean
subset(df, North > rowMeans(df[-1]))
或者如果我们更喜欢使用 dplyr
library(dplyr)
df %>%
filter(max.col(cur_data()[-1], 'first') == 1)
同样,如果它基于行平均
df %>%
filter(North > rowMeans(cur_data()[-1]))
# base
df[df$North > rowMeans(df[-1]), ]
# A tibble: 2 x 5
Species North South East West
<chr> <dbl> <dbl> <dbl> <dbl>
1 a 4 3 2 3
2 D 3 2 2 2
我有一个如下所示的数据框:
library(tidyverse)
df <- tribble (
~Species, ~North, ~South, ~East, ~West,
"a", 4, 3, 2, 3,
"b", 2, 3, 4, 5,
"C", 2, 3, 3, 3,
"D", 3, 2, 2, 2
)
我想筛选出最高值的物种,例如北。 在这种情况下,将选择物种 A 和 D。预期输出将是一个只有物种 A 和 D 的 df。 我使用了这样的解决方法:
df %>%
group_by(species) %>%
mutate(rowmean = mean(North:West) %>%
filter(North > rowmean) %>%
ungroup() %>%
select(!rowmean)
这似乎是一个简单任务的大量代码! 但是,我找不到一种更代码友好的方法。是否有一种(最好是 tidyverse)方法以更干净的方式执行此任务?
亲切的问候
更简单的方法是在 base R
中使用 max.col
。 Select 数字列。获取值为 max
的每一行的列索引。检查它是否等于 1,即第一列(因为我们只从第二列开始选择)和 subset
行
subset(df, max.col(df[-1], 'first') == 1)
# A tibble: 2 x 5
# Species North South East West
# <chr> <dbl> <dbl> <dbl> <dbl>
#1 a 4 3 2 3
#2 D 3 2 2 2
如果是基于rowwise mean
subset(df, North > rowMeans(df[-1]))
或者如果我们更喜欢使用 dplyr
library(dplyr)
df %>%
filter(max.col(cur_data()[-1], 'first') == 1)
同样,如果它基于行平均
df %>%
filter(North > rowMeans(cur_data()[-1]))
# base
df[df$North > rowMeans(df[-1]), ]
# A tibble: 2 x 5
Species North South East West
<chr> <dbl> <dbl> <dbl> <dbl>
1 a 4 3 2 3
2 D 3 2 2 2