使用If从R中的列表中按名称选择数据框

时间:2018-08-02 21:16:28

标签: r list dataframe dplyr

在R中:我有一个3个数据帧的列表(Book1,Book2,Book3),列表名为dflist4。我有一个代码想要分别应用于列表中的每个数据框,因为maxm的值对于每个数据框都不同。我编写了它,并且它起作用了,但是仅当Book1,Book2和Book3的大小均相等时才是如此。当它们的大小不相等时,代码将不会运行(错误:ops.dataframe ==仅为大小相等的数据帧定义)。当我将==更改为=时,我发现这是不合逻辑的。不管数据框的大小如何,任何人都可以提出关于如何根据其名称从列表中选择数据框的建议吗?

此处的代码:

--update

1 个答案:

答案 0 :(得分:1)

在上面的评论之后,我假设Book1Book2Book3中的第三列称为Col3

您可以使用purrr::map2

library(tidyverse)
purrr::map2(dflist4, c(3, 2, 1), function(df, maxm) df %>% mutate(Col4 = Col3 / maxm))

由于您没有提供示例数据,因此下面是一个基于mtcars的示例

purrr::map2(list(mtcars[1:3, ], mtcars[1:3, ]), c(10, 100), function(df, maxm)
    df %>% mutate(mpg.new = mpg / maxm))
#[[1]]
#   mpg cyl disp  hp drat    wt  qsec vs am gear carb mpg.new
#1 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4    2.10
#2 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4    2.10
#3 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1    2.28
#
#[[2]]
#   mpg cyl disp  hp drat    wt  qsec vs am gear carb mpg.new
#1 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4   0.210
#2 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4   0.210
#3 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1   0.228