我想找到一个变量(列)的最大值,然后保留这个值(最大值)和它下面的所有值。除了这些值,我想保留数据框中所有其他变量(列)的相应值。对于其中的所有变量,我想从数据框中排除该点以上的所有值。包括示例数据框 (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 列
答案 0 :(得分:2)
您可以使用每列从 df
到 min
的 nrow(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