【问题标题】:Finding the maximum value of a variable查找变量的最大值
【发布时间】:2021-07-06 07:30:28
【问题描述】:

我想找到一个变量(列)的最大值,然后保留这个值(最大值)和它下面的所有值。除了这些值,我还想保留数据框中所有其他变量(列)的相应值。对于其中的所有变量,我想从数据框中排除高于此点的所有值。包括示例数据框 (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 列

【问题讨论】:

  • 您能否详细说明您想要实现的目标? IE。根据您的输入df,我不清楚您将如何达到预期的结果值。
  • 您的输入 df 也不同于我假设的代码下面的文本也应该代表一些数据? "Ba Sr Mn 1 1 1 1 2 1 1 1 3 1 1 2 4 2 2 1 5 2 2 1 显示 1 到 5 个条目,共 3 列"

标签: r dataframe max


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    这行得通吗:

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

    【讨论】:

      【解决方案3】:

      使用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
      

      【讨论】:

      • 感谢您的好评!我想这样做,但我应该提到我使用的是列表而不是数据框,并且有兴趣专门找到 Mn 的最大值。我想保留这个值(Mn 的最大值)和低于它的所有值。除了这些值,我想保留列表中所有其他变量(列)的对应值(即 Ba 和 Sr)。
      • @AngelaRussell 是 listdata.frame 还是只是一个列表。您能否发布一个新问题,因为这里的所有答案都是基于您的 data.frame 输入
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-11
      • 1970-01-01
      • 2016-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多