簡體   English   中英

如何使用 purrr 中的 map_* function 讀取多個文件以保存和計算每個文件中的變量數?

[英]How to read multiple files to save and count number of variables in each using a map_* function from purrr?

我使用map_dfr()讀取多個文件並使用以下代碼嵌套數據:

library("tidyverse")
library("readxl")

files <- c("file1.xlsx", "file2.xlsx", "file3.xlsx", "file4.xlsx")

df <- files %>% 
  set_names() %>% 
  map_dfr(read_excel, .id = "File") %>% 
  group_by(File) %>% 
  nest()

dataframe df看起來像這樣:

在此處輸入圖像描述

如何使用mutate()添加一列來保存每個數據中的變量名,另一列來計算有多少變量? 我試過這個,但它不工作:

df2 <- df %>%
  mutate(var.list = names(data)) %>% 
  mutate(var.n = unique(var.list))

我的意圖是有一個列表列var.list來保存每個數據集中的變量(列名)和一個列var.n來計算變量的數量。 謝謝您的幫助。

虛假設置:

library(dplyr)
library(purrr)

set.seed(42)
df <- tibble(file = sprintf("file%i.xlsx", 1:3)) %>%
  mutate(data = map(file, ~ mtcars[,sample(11,size=7)]))
df
# # A tibble: 3 x 2
#   file       data             
#   <chr>      <list>           
# 1 file1.xlsx <df[,7] [32 x 7]>
# 2 file2.xlsx <df[,7] [32 x 7]>
# 3 file3.xlsx <df[,7] [32 x 7]>

工作:

df %>%
  mutate(
    var.list = map(data, colnames),
    var.n = map_int(var.list, ~ length(unique(.)))
  ) %>%
  # and just to show the differencs
  mutate(
    var.names = map_chr(var.list, toString)
  )
# # A tibble: 3 x 5
#   file       data              var.list  var.n var.names                          
#   <chr>      <list>            <list>    <int> <chr>                              
# 1 file1.xlsx <df[,7] [32 x 7]> <chr [7]>     7 mpg, drat, carb, am, cyl, hp, qsec 
# 2 file2.xlsx <df[,7] [32 x 7]> <chr [7]>     7 gear, mpg, vs, qsec, hp, carb, drat
# 3 file3.xlsx <df[,7] [32 x 7]> <chr [7]>     7 hp, gear, cyl, qsec, disp, mpg, wt 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM