使用readxl导入数据 问题说明
我试图在一个电子表格中的多个表上迭代,以获取第一行作为列名,第11行+作为数据。我希望将它们作为单个数据帧导入。我遇到了问题,因为工作表中有10个标题行,我似乎无法在不丢失数据的情况下聚合工作表 资料 有关文件见ABS网站的表6 我的尝试 第一块完成了将数据导入r的繁重工作。map函数自然会生成一个列表列表,其中包含名称中包含文本“data”的表格中的数据(这样做是因为每个电子表格中都有两张表格包含一些不相关的信息) 但是我希望输出在一个数据框中,所以我尝试使用map_df函数,但是在第一个数据框之后,电子表格中的所有数据都作为NA值导入(不正确)使用readxl导入数据 问题说明,r,tidyverse,import-from-excel,readxl,R,Tidyverse,Import From Excel,Readxl,我试图在一个电子表格中的多个表上迭代,以获取第一行作为列名,第11行+作为数据。我希望将它们作为单个数据帧导入。我遇到了问题,因为工作表中有10个标题行,我似乎无法在不丢失数据的情况下聚合工作表 资料 有关文件见ABS网站的表6 我的尝试 第一块完成了将数据导入r的繁重工作。map函数自然会生成一个列表列表,其中包含名称中包含文本“data”的表格中的数据(这样做是因为每个电子表格中都有两张表格包含一些不相关的信息) 但是我希望输出在一个数据框中,所以我尝试使用map_df函数,但是在第一个数据
库(tidyverse)
图书馆(stringr)
df1%
excel_工作表()%>%
str_子集(“数据”)%%>%
映射(读取excel,路径=路径,跳过=9)
第二个块拾取每个工作表中的列名,以便将它们应用于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)
nms%
excel_工作表()%>%
str_子集(“数据”)%%>%
映射函数(读取excel,路径=路径,n\u max=0,列名称=T)%>%
变异(
日期=1
) %>%
挑选(
日期,一切
)
names(df1)不完全确定您要查找的内容,但是如果您想阅读工作簿中的所有工作表,请保留并跳过前9行。然后,您只需通过使用left\u join
的reduce
将这些元素缝合在一起,以去除NA值
df1 <- path %>%
excel_sheets() %>%
str_subset("Data") %>%
map(~read_excel(file, .x, skip = 9)) %>%
reduce(left_join, by = "Series ID")
该代码块仍然返回从工作表Data2:Data5读取的数据中的NA。如果你叫scape
你会看到所有的NA。另外,目的是在原始电子表格中保留列的名称,我认为这一建议并不奇怪。使用reduce
和left\u join
可以解决这个问题。更新了我的答案。很好。我可以使用相同的代码块将所有那些char
字段转换为double或integer吗?将其添加到我的答案中
df1 <- path %>%
excel_sheets() %>%
str_subset("Data") %>%
map(~read_excel(file, .x, skip = 9)) %>%
reduce(left_join, by = "Series ID")
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)