如何在dplyr-R中对多个数据帧应用相同的操作?

时间:2018-06-14 13:06:32

标签: r dplyr data-manipulation tidyverse

我想对R' R'中的多个数据帧应用相同的操作。但无法得到如何处理这件事。

这是pipedplyr操作的示例:

library(dplyr)

    iris %>% mutate(Sepal=rowSums(select(.,starts_with("Sepal"))),
                    Length=rowSums(select(.,ends_with("Length"))),
                    Width=rowSums(select(.,ends_with("Width"))))
iris2 <- iris
iris3 <- iris

您能否建议如何将相同的管道功能应用于irisiris2isis3?我需要使用dplyr管道操作。

我认为map函数可能会有所帮助,但由于我还没有完全理解它的概念,我在应用它时遇到了错误。

示例脚本:

library(purrr)

iris.set <- c(iris,iris2,iris3)
map(iris.set, ~ . %>% mutate(Sepal=rowSums(select(.,starts_with("Sepal"))),
                Length=rowSums(select(.,ends_with("Length"))),
                Width=rowSums(select(.,ends_with("Width")))))

2 个答案:

答案 0 :(得分:4)

如果您将操作变为功能:

library(dplyr)
my_fun <- function(x) { 
      x %>%       
          mutate(Sepal=rowSums(select(.,starts_with("Sepal"))),
          Length=rowSums(select(.,ends_with("Length"))),
          Width=rowSums(select(.,ends_with("Width"))))
}

您可以轻松地将数据框列表传送给它:

result <- list( iris, iris2, iris3 ) %>%
    lapply( my_fun )

答案 1 :(得分:1)

对你有好处吗?

<div class="sq-tri">
  <div class="tri tri-down" data-location="top"></div>
  <div class="tri tri-right" data-location="left"></div>
  <div class="tri tri-left" data-location="right"></div>
  <div class="tri tri-up" data-location="bottom"></div>
</div>