问题描述
我试图在一个扩展表中的多个工作表上迭代,将第一行作为列名,将行11+作为数据。我希望把它们作为一个单一的数据文件导入。我遇到了问题,因为工作表中有10行标题,而且我似乎无法在不丢失数据的情况下聚合这些表。
数据
该文件在此页网站的表6中找到。
我的尝试
第一个块完成了将数据放入r中的繁重工作。map函数自然会产生一个列表,其中包含在其名称包含文本" data“的工作表中找到的数据(这样做是因为每个散页页中都有两个包含一些无关信息的表)。
但是我希望输出在一个dataframe中,所以我尝试使用map_df函数,但是第一个数据表之后的所有数据都是以NA值的形式导入的(不正确)。
library(tidyverse)
library(stringr)
df1 <- path %>%
excel_sheets() %>%
str_subset("Data") %>%
map(read_excel, path = path, skip = 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)如果有人能告诉我如何在没有NA的情况下导入数据,那就太好了。向我展示如何在一个步骤中做到这一点,而不需要第二个块来命名列。
发布于 2017-10-13 03:14:18
不太清楚您在寻找什么,但是如果您想要阅读该工作簿中的所有工作表,请保留并跳过前9行。然后,您只需要通过一个reduce将所有这些都缝合在一起,使用left_join来消除NA值。
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)https://stackoverflow.com/questions/46721617
复制相似问题