Is there a way to skip rows on file read in while keeping the header rows?


I’m working with a Qualtrics Survey dataset and for some reason the first three rows of each survey are kind of a jumbled mess that are a mix of long hand survey questions and shorthand variable names. The first row of the dataset is the shorthand variable names while I want to get rid of the next two.

I want to get rid of these rows because they kind of poison the datatype of the column casting everything as chr. Is there a way I can keep the first row and remove the next two before the columns are cast as a specific data type? My code so far?

raw.file.path <- here::here("raw_data", "FDSCI 101 Attitude Survey vS14.csv")

# I've used drop = 37 here to get rid of a column I don't need, 
# curious if there is a way to get rid of rows while keeping the first row as headers. <- import(raw.file.path, drop = 37, setclass = "tibble")

# This removes the rows but the columns are already poisoned. %>%

Any help would be greatly appreciated!


I once briefly looked for a solution to a similar problem.

The only advice I could find was to read in the first line to get the column names, then separately read in from line 4 onwards (specifying no column names) for the data and then finally set the column names from what was read in by the first step.

I would also be interested in more elegant solutions.


If you use the XLConnect package, there is a readWorkbook function which lets you specify which rows to read into a dataset. See the help page here:


Here is a snippet of code I wrote for working with qualtrics back near the start of the year

It doesn’t directly answer your issue but might be handy.

In similar situations for multiple headings, I have also done one read of one row to get the headings, then a second (skip) read of the data, then applied the headings to the data