Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用readxl导入数据 问题说明_R_Tidyverse_Import From Excel_Readxl - Fatal编程技术网

使用readxl导入数据 问题说明

使用readxl导入数据 问题说明,r,tidyverse,import-from-excel,readxl,R,Tidyverse,Import From Excel,Readxl,我试图在一个电子表格中的多个表上迭代,以获取第一行作为列名,第11行+作为数据。我希望将它们作为单个数据帧导入。我遇到了问题,因为工作表中有10个标题行,我似乎无法在不丢失数据的情况下聚合工作表 资料 有关文件见ABS网站的表6 我的尝试 第一块完成了将数据导入r的繁重工作。map函数自然会生成一个列表列表,其中包含名称中包含文本“data”的表格中的数据(这样做是因为每个电子表格中都有两张表格包含一些不相关的信息) 但是我希望输出在一个数据框中,所以我尝试使用map_df函数,但是在第一个数据

我试图在一个电子表格中的多个表上迭代,以获取第一行作为列名,第11行+作为数据。我希望将它们作为单个数据帧导入。我遇到了问题,因为工作表中有10个标题行,我似乎无法在不丢失数据的情况下聚合工作表

资料 有关文件见ABS网站的表6

我的尝试 第一块完成了将数据导入r的繁重工作。map函数自然会生成一个列表列表,其中包含名称中包含文本“data”的表格中的数据(这样做是因为每个电子表格中都有两张表格包含一些不相关的信息)

但是我希望输出在一个数据框中,所以我尝试使用map_df函数,但是在第一个数据框之后,电子表格中的所有数据都作为NA值导入(不正确)

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