如何使用 purrr 的 map_* 函数读取多个文件以保存和计算每个文件中的变量数?
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()
数据框 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
我使用 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()
数据框 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