如何使用 R 中的列表对向量中的所有值进行乘法和除法以及如何过滤列表

How to multiply and divide all values in a vector using a list in R and how to filter a list

我有一个列表(包含 83 个数据帧),我想将整个列表中的一个变量(即 Mn,请参见下面的 'practice' df)乘以 10000。然后我想找到 Mn 的最大值(在每个数据帧内),然后保留这个值(最大值)和它下面的所有值(在每个数据帧内)。除了这些 Mn 值,我还想保留数据框中所有其他变量的相应值(即 Ba、Sr)。对于所有变量,我想从每个数据框中排除高于这一点的所有值。完成此减少后,我想 return Mn 为其初始值(即,将 Mn 除以 10000)。

下面是练习脚本和我想达到的效果(Mn 事先乘以 10000,然后再除以 10000)。如有任何帮助,我们将不胜感激。

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

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

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

df

#     Ba  Sr  Mn
# 1   1   1   2
# 2   2   2   1
# 3   2   2   1

我认为我的问题的过滤器部分的脚本是这样的:

MaxMn <- lapply(df, function(df){
  df %>% 
   filter(cummax(invoke(pmax, cur_data())) == max(cur_data()))
})

到 select 从 Mn 列中的最大值开始的所有行,您可以使用 filter 作为 -

library(dplyr)

df %>% filter(row_number() >= which.max(Mn))

#  Ba Sr Mn
#1  1  1  2
#2  2  2  1
#3  2  2  1

slice-

df %>% slice(which.max(Mn):n())

并且在基数 R 中 -

df[which.max(Mn):nrow(df), ]

您可以使用 lapply/map -

将其应用于数据帧列表
lapply(list_df, function(df) df %>% filter(row_number() >= which.max(Mn)))