代码之家  ›  专栏  ›  技术社区  ›  Alex

如何传递一列文件名来改变并返回dplyr中的列数

  •  0
  • Alex  · 技术社区  · 7 年前

    我有以下功能

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

    我想传递一个tible——它包含一列我的excel文件名给这个函数,并生成一个新的列,告诉我excel电子表格中的列数。

    > 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)))
    

    我最后也犯了同样的错误。

    我做错什么了?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Ronak Shah    7 年前

    正如@Lyngbakr在评论中所建议的,我们可以使用 map_int rowwise 对于每个 file.list

    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))