使用 readxl 导入数据
Importing data using readxl
问题描述
我正在尝试遍历多个 sheet 展开 sheet 以选择第一行作为列名,第 11 行以上作为数据。我希望将它们导入为单个数据框。我遇到了麻烦,因为 sheet 中有 10 header 行,我似乎无法在不丢失数据的情况下聚合 sheet。
数据
有问题的文件位于 ABS 网站 this page 的 Table 6。
我的尝试
第一个块负责将数据导入 r 的繁重工作。 map 函数自然会产生一个列表列表,其中包含在 sheet 中找到的数据,其名称包含文本“数据”(这样做是因为每个传播中都有两个 sheet sheet 包含一些不相关的信息)。
但是我想要数据帧中的输出所以我尝试使用 map_df 函数但是来自 spreadsheets first 之后的所有数据是作为 NA 值导入(不正确)。
library(tidyverse)
library(stringr)
df1 <- path %>%
excel_sheets() %>%
str_subset("Data") %>%
map(read_excel, path = path, skip = 9)
第二个块选取每个 sheet 中的列名称,以便它们可以应用于 df1。
nms <- path %>%
excel_sheets() %>%
str_subset("Data") %>%
map_df(read_excel, path = path, n_max = 0, col_names = T) %>%
mutate(
date = 1
) %>%
select(
date, everything()
)
names(df1) <- names(nms)
如果有人能告诉我如何在单个数据框中导入没有 NA 的数据,那就太好了。向我展示如何一步完成的奖励积分,而不需要第二个块来命名列。
不确定您要查找什么,但如果您想阅读该工作簿中的所有工作表,请保留并跳过前 9 行。然后,您只需要使用 left_join
通过 reduce
将这些全部拼接在一起即可摆脱 NA 值。
df1 <- path %>%
excel_sheets() %>%
str_subset("Data") %>%
map(~read_excel(file, .x, skip = 9)) %>%
reduce(left_join, by = "Series ID")
如果您想保留原来的 header 姓名:
path %>%
excel_sheets() %>%
str_subset("Data") %>%
map(~read_excel(file, .x, col_names = FALSE) %>%
set_names(., c("Series ID", .[1, 2:ncol(.)])) %>%
slice(-1:-10)) %>%
reduce(left_join, by = "Series ID") %>%
mutate_at(vars(-`Series ID`), as.numeric)
问题描述
我正在尝试遍历多个 sheet 展开 sheet 以选择第一行作为列名,第 11 行以上作为数据。我希望将它们导入为单个数据框。我遇到了麻烦,因为 sheet 中有 10 header 行,我似乎无法在不丢失数据的情况下聚合 sheet。
数据
有问题的文件位于 ABS 网站 this page 的 Table 6。
我的尝试
第一个块负责将数据导入 r 的繁重工作。 map 函数自然会产生一个列表列表,其中包含在 sheet 中找到的数据,其名称包含文本“数据”(这样做是因为每个传播中都有两个 sheet sheet 包含一些不相关的信息)。
但是我想要数据帧中的输出所以我尝试使用 map_df 函数但是来自 spreadsheets first 之后的所有数据是作为 NA 值导入(不正确)。
library(tidyverse)
library(stringr)
df1 <- path %>%
excel_sheets() %>%
str_subset("Data") %>%
map(read_excel, path = path, skip = 9)
第二个块选取每个 sheet 中的列名称,以便它们可以应用于 df1。
nms <- path %>%
excel_sheets() %>%
str_subset("Data") %>%
map_df(read_excel, path = path, n_max = 0, col_names = T) %>%
mutate(
date = 1
) %>%
select(
date, everything()
)
names(df1) <- names(nms)
如果有人能告诉我如何在单个数据框中导入没有 NA 的数据,那就太好了。向我展示如何一步完成的奖励积分,而不需要第二个块来命名列。
不确定您要查找什么,但如果您想阅读该工作簿中的所有工作表,请保留并跳过前 9 行。然后,您只需要使用 left_join
通过 reduce
将这些全部拼接在一起即可摆脱 NA 值。
df1 <- path %>%
excel_sheets() %>%
str_subset("Data") %>%
map(~read_excel(file, .x, skip = 9)) %>%
reduce(left_join, by = "Series ID")
如果您想保留原来的 header 姓名:
path %>%
excel_sheets() %>%
str_subset("Data") %>%
map(~read_excel(file, .x, col_names = FALSE) %>%
set_names(., c("Series ID", .[1, 2:ncol(.)])) %>%
slice(-1:-10)) %>%
reduce(left_join, by = "Series ID") %>%
mutate_at(vars(-`Series ID`), as.numeric)