【问题标题】:How to pass a column of file names to mutate and return the number of columns in dplyr如何将一列文件名传递给变异并返回 dplyr 中的列数
【发布时间】:2019-04-19 02:04:11
【问题描述】:

我有以下功能


colr <- function(file){
  a <- file %>% 
    read_xlsx() 

  ncol(a)
}

我想传递一个 tibble - 其中包含我的 excel 文件名的列给这个函数,并创建一个新列来告诉我 excel 电子表格中的列数。

所以我的 tibble(file.list) 是

> file.list
   <chr>
   file_a.xlsx
   file_b.xlsx
   file_c.xlsx

我想要以下

> file.list       ncols
   <chr>          <int>
   file_a.xlsx      10
   file_b.xlsx      10
   file_c.xlsx       2

这是我尝试过的

tibble(file.list) %>% 
  mutate(ncols =  colr(file.list))

但我得到了错误

错误:path 必须是字符串

然后我尝试使用quo

tibble(file.list) %>% 
  mutate(ncols =  colr(quo(file.list)))

我最终遇到了同样的错误。

我做错了什么?

【问题讨论】:

  • 首先要检查它是否适用于 file.list[1] %&gt;% read_xlsx(.,range = cell_cols("A:Z")) %&gt;% ncol ?此外,您可能需要包含 xlsx 文件的完整路径。
  • 当您将单个文件名作为字符串传递给colr 时,它是否有效?例如,colr("file_a.xlsx").
  • 我确实得到了一个整数返回 colr("file_a.xlsx")
  • @RonakShah file.list[1] %&gt;% read_xlsx() %&gt;% ncol 工作
  • 使用purrrdplyr,这段代码能运行吗? tibble(file.list) %&gt;% mutate(ncols = map_int(file.list, colr))

标签: r dplyr rlang


【解决方案1】:

根据@Lyngbakr 的评论建议,我们可以为每个file.list 使用map_introwwise

library(dplyr)
library(purrr)

tibble::tibble(file.list) %>% 
       mutate(ncols =  map_int(file.list, colr))


tibble::tibble(file.list) %>% 
         rowwise() %>%
         mutate(ncols =  colr(file.list))

【讨论】:

  • colr 返回一个整数,那不就是map_int吗?
  • 是的map_int 会更好。我还注意到你之前发表了评论。我不介意删除答案。您可以将其发布为您的答案。 :)
  • 几乎是同一时间,所以不需要删除!不过,谢谢。
猜你喜欢
  • 1970-01-01
  • 2017-09-12
  • 2015-11-21
  • 2018-05-15
  • 2015-03-29
  • 1970-01-01
  • 2017-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多