[英]How to apply same operation to multiple data frames in dplyr-R?
我想對“ R”中的多個數據幀應用相同的操作,但無法獲得如何處理此問題的方法。
這是dplyr
的pipe
操作dplyr
:
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
您能建議如何將相同的管道函數應用於iris
, iris2
和isis3
嗎? 我需要使用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")))))
如果將操作轉換為功能:
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 )
對你有好處嗎?
library(dplyr)
#matrices replication
iris1=iris
iris2=iris
iris3=iris
#list of combinations: apply is tricky for array input
irises=matrix(c("iris1","iris2","iris3"), ncol=1)
#function design
Funct<-function(df_name){
df=get(df_name)
df %>% mutate(Sepal=rowSums(select(.,starts_with("Sepal"))),
Length=rowSums(select(.,ends_with("Length"))),
Width=rowSums(select(.,ends_with("Width"))))
}
apply(irises,MARGIN=2, Funct)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.