查找变量的最大值

时间:2021-07-06 07:30:28

标签: r dataframe max

我想找到一个变量(列)的最大值,然后保留这个值(最大值)和它下面的所有值。除了这些值,我想保留数据框中所有其他变量(列)的相应值。对于其中的所有变量,我想从数据框中排除该点以上的所有值。包括示例数据框 (df) 和预期数据框 (df2) 的脚本,即我想要实现的目标。我会很感激一些脚本来做到这一点。

Ba <- c(1,1,1,2,2)
Sr <- c(1,1,1,2,2)
Mn <- c(1,1,2,1,1)
df <- data.frame(Ba, Sr, Mn)

df

#   Ba Sr Mn
# 1  1  1  1
# 2  1  1  1
# 3  1  1  2
# 4  2  2  1
# 5  2  2  1

显示 5 个条目中的 1 到 5 个,总共 3 列

这就是我想在 R 中实现的目标:

Ba2 <- c(1,2,2)
Sr2 <- c(1,2,2)
Mn2 <- c(2,1,1)
df2 <- data.frame(Ba2, Sr2, Mn2)

df2

#   Ba2 Sr2 Mn2
# 1   1   1   2
# 2   2   2   1
# 3   2   2   1

显示 3 个条目中的 1 到 3 个,总共 3 列

3 个答案:

答案 0 :(得分:2)

您可以使用每列从 dfminnrow(df) 序列对 which.max 进行子集:

df[min(sapply(df, which.max)):nrow(df),]
#  Ba Sr Mn
#3  1  1  2
#4  2  2  1
#5  2  2  1

答案 1 :(得分:1)

这行得通吗:

df[max(apply(df, 1, which.max)):nrow(df),]
  Ba Sr Mn
3  1  1  2
4  2  2  1
5  2  2  1

答案 2 :(得分:0)

使用 cummax

library(dplyr)
library(purrr)
df %>% 
   filter(cummax(invoke(pmax, cur_data())) == max(cur_data()))
  Ba Sr Mn
1  1  1  2
2  2  2  1
3  2  2  1