如何使用readxl跳过第二行

如何使用readxl跳过第二行,r,excel,readxl,R,Excel,Readxl,我收到了一份excel电子表格:列名在第一行,垃圾文本在第二行,实际数据从第三行开始。我想使用readxl包将其读入数据帧,保留第一行的列名,但丢弃第二行 简单地将所有行读入数据框,然后删除第一行是行不通的,因为excel文件第二行中的垃圾与列的数据类型不匹配 我想要一种不用手动编辑excel文件的方法。我建议读取整个文件,然后手动删除第2行 例如,下面是一个示例Excel文件的屏幕截图 我们读取完整的文件,并删除第1行(对应于Excel工作表中的第二行) 库(readxl) 图书馆(tidy

我收到了一份excel电子表格:列名在第一行,垃圾文本在第二行,实际数据从第三行开始。我想使用
readxl
包将其读入数据帧,保留第一行的列名,但丢弃第二行

简单地将所有行读入数据框,然后删除第一行是行不通的,因为excel文件第二行中的垃圾与列的数据类型不匹配


我想要一种不用手动编辑excel文件的方法。

我建议读取整个文件,然后手动删除第2行

例如,下面是一个示例Excel文件的屏幕截图

我们读取完整的文件,并删除第1行(对应于Excel工作表中的第二行)

库(readxl)
图书馆(tidyverse)
df%
map_df(~parse_guess()
df
##一个tibble:2x4
#A、B、C、D
#     
#1    20    30    40    50
#2    30    40    50    60

这里是另一个解决方案:

首先,使用readxl读取第一行,并另存为数组(因为它只导入第一行,所以速度很快):


col\u名称您需要在整个文件中读取(这将为您提供列名),然后手动删除第2行,并可能重新排列第2行下的列条目以匹配列名。我发现
read\u excel
在处理“无用”行时非常健壮:它仍然会读取文件,但任何可能的清理都取决于您。由于OP提到手动删除有问题的行会弄乱他的数据类型,因此合乎逻辑的下一步是:
df%>%mutate\u if(is.character,as.numeric)
。当然,这假设没有真正的字符列,但是
mutate
调用也可以更改为只处理那些需要转换的列,或者在删除第二行后,重新分析所有列,例如使用purr::map和readr::parse\u guess:
df%>%map\u df(~parse\u guess()
%
来自magrittr,都在
tidyverse
@JannikBuhr哦,我喜欢这样。谢谢并补充道。
library(readxl)
library(tidyverse)
df <- read_excel("Workbook1.xlsx")[-1, ] %>%
    map_df(~parse_guess(.))
df
## A tibble: 2 x 4
#      A     B     C     D
#  <int> <int> <int> <int>
#1    20    30    40    50
#2    30    40    50    60
col_names <- array(read_excel('C:/spreadsheet.xlsx', sheet = 'Sheet1', n_max = 1, col_names = FALSE))
df <- data.frame(read_excel('C:/spreadsheet.xlsx', sheet = 'Sheet1', skip = 2, col_names = FALSE))
colnames(df) <- col_names