R应用函数格式化许多数据集



我想循环浏览九个数据集,执行计算,并输出不同的文件名。

现有代码:

list <- c(corporate_service, finance, its, law, market_services, operations, president, member_services, System_Planning)
Calc <- function(list){

list %>%  filter(Total_Flag == 1) %>%
select(Element, Amount, Total)
}

lapply(list, Calc)

我想循环浏览每个数据集并应用上面的函数。更具体地说,我想给每个处理过的数据帧重新命名一些不同的名称。有办法做到这一点吗?我还应该注意,这个代码对我不起作用——有什么明显的错误吗?

感谢

首先要避免用单独的类似结构的数据帧淹没您的全局环境。相反,继续使用数据帧列表。请参阅@GregorThomas的最佳实践答案。事实上,命名列表是更好的索引。

# DEFINE A NAMED LIST OF DATA FRAMES
df_list <- list(corporate_service = corporate_service, 
finance = finance, 
its = its, 
law = law, 
market_services = market_services, 
operations = operations, 
president = president, 
member_services = member_services, 
system_planning = System_Planning)
# REMOVE ORIGINALS FROM GLOBAL ENVIRONMENT
rm(corporate_service, finance, its, law, market_services, 
operations, president, member_services, System_Planning)
# REVIEW STRUCTURE
str(df_list)

然后定义一个与单个数据帧(而不是list(及其列表名称交互的方法。然后反复调用:

Calc <- function(df, nm) {
df <- select(filter(df, Total_Flag == 1), Element, Amount, Total)       
write.csv(df, file.path("path", "to", "my", "destination", paste(nm, ".csv")))
return(df)           
}

# ASSIGN TO A NEW LIST
new_df_list <- mapply(Calc, df_list, names(df_list), SIMPLIFY=FALSE)
new_df_list <- Map(Calc, df_list, names(df_list))    # EQUIVALENT WRAPPER TO ABOVE

需要明确的是,如果数据帧存储在较大的容器中,则不会丢失它的功能。

head(new_df_list$corporate_service)
tail(new_df_list$finance)
summary(new_df_list$its)

这样的容器甚至有助于序列化相同的操作:

lapply(new_df_list, summary)

甚至将所有数据帧元素与相应列表名称的列连接在一起:

final_df <- dplyr::bind_rows(new_df_list, .id="division")

总体而言,您的组织和数据管理得到了增强,因为您只需要使用单个索引对象,而不需要使用许多需要lsmgetgetevalassign进行动态操作的对象。

最新更新