首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用readxl导入数据

使用readxl导入数据
EN

Stack Overflow用户
提问于 2017-10-13 02:32:13
回答 1查看 316关注 0票数 1

问题描述

我试图在一个扩展表中的多个工作表上迭代,将第一行作为列名,将行11+作为数据。我希望把它们作为一个单一的数据文件导入。我遇到了问题,因为工作表中有10行标题,而且我似乎无法在不丢失数据的情况下聚合这些表。

数据

该文件在此页网站的表6中找到。

我的尝试

第一个块完成了将数据放入r中的繁重工作。map函数自然会产生一个列表,其中包含在其名称包含文本" data“的工作表中找到的数据(这样做是因为每个散页页中都有两个包含一些无关信息的表)。

但是我希望输出在一个dataframe中,所以我尝试使用map_df函数,但是第一个数据表之后的所有数据都是以NA值的形式导入的(不正确)。

代码语言:javascript
运行
复制
library(tidyverse)
library(stringr)

df1 <- path %>% 
  excel_sheets() %>% 
  str_subset("Data") %>%
  map(read_excel, path = path, skip = 9)

第二个块获取每个工作表中的列名,以便将它们应用于df1。

代码语言:javascript
运行
复制
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的情况下导入数据,那就太好了。向我展示如何在一个步骤中做到这一点,而不需要第二个块来命名列。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-13 03:14:18

不太清楚您在寻找什么,但是如果您想要阅读该工作簿中的所有工作表,请保留并跳过前9行。然后,您只需要通过一个reduce将所有这些都缝合在一起,使用left_join来消除NA值。

代码语言:javascript
运行
复制
df1 <- path %>% 
  excel_sheets() %>% 
  str_subset("Data") %>%
  map(~read_excel(file, .x, skip = 9)) %>% 
  reduce(left_join, by = "Series ID")

如果要保留原始标题名称:

代码语言:javascript
运行
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46721617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档