r - 无法使用 dplyr 包设置工作表名称
问题描述
我正在将列表中的多个数据框导出到一个 excel 文件中的不同工作表中,我可以使用以下代码执行此操作(mtcars
用作示例):
library(tidyverse)
library(ImportExport)
data_list <- split(mtcars, mtcars$cyl)
table_name <- names(data_list)
# Run
excel_export(data_list, "foo.xlsx", table_names = tab_name)
然后,我想用另一种方式做到这一点,因为我看到 dplyr 文档说:
.y
引用键,一个一行小标题,每个分组变量一列标识组。
所以我认为.y
等于我创建的变量table_name
,我这样做:
data_list %>% excel_export("foo.xlsx", table_names = .y)
然后我得到一个错误:
.jcall 中的错误(wb,“Lorg/apache/poi/ss/usermodel/Sheet;”,“createSheet”,:找不到对象'.y'
有人可以解释为什么以及如何使用.y
.
任何帮助将不胜感激。
解决方案
如果你引用一个引用,我认为使用引用该引用的函数是有意义的。在这种情况下,我发现了它
group_map
(其中包括group_walk
一个主要在副作用中起作用的补充功能)。你仍然需要
group_by
数据。更具体地说,它需要在一个tbl_df
(不是 alist
)上操作,通常(但不总是)一个分组的tibble。
我既没有ImportExport
也没有xlsx
安装(前者依赖于),所以我会用write.csv
.
library(dplyr)
mtcars %>%
group_by(cyl) %>%
group_walk(~ write.csv(.x, paste0(.y, ".csv")))
这样做的副作用是在当前目录中创建了三个文件,分别名为4.csv
、6.csv
和8.csv
。
如果要对命名列表进行操作,还可以使用以下之一:
# using: data_list <- split(mtcars, mtcars$cyl)
purrr::imap(data_list,
~ write.csv(.x, paste0("~/Downloads/", .y, ".csv")))
Map(write.csv, data_list, paste0(names(data_list), ".csv"))
效果是一样的。
推荐阅读
- java - 检查java中的条件导致错误
- reactjs - 使用 axios 获取图像并将其用作背景图像
- tensorflow - 如何获得可重现的结果(Keras、Tensorflow):
- python - 多索引 Pandas 数据框并在 excel 中导出
- spring-boot - 将参数传递给 IntelliJ IDEA 中的 Liquibase Gradle 插件配置
- ibm-cloud - Watson Assistant 中的上下文变量
- bing - 必应搜索 API v7 分页
- sql - 在天蓝色云中的数据库中执行时,sql 查询无法正常工作
- javascript - responseType blob 有效,但不是 Ajax 的新 Blob
- javascript - 如何从 Web 程序集获取数据到 JavaScript?