I need to extract many columns from a dataset. I have a very large csv file with thousands of columns and rows, and I read it into R using:

mydata <- read.csv(file = "file.csv",header = TRUE,sep = ",",row.names = 1)

Each column is a gene name. I know how to extract specific columns from my R data.frame by using the basic code like this:

dataset[ , "GeneName1", "GeneName2"]

But my question is, how do I pull hundreds of gene names? Too many to type in? They are listed in a txt file. I'm new, so please go easy on jargon and abbreviations.

  • $\begingroup$ try dataset[, 1:100] or melt(dataset), ?melt $\endgroup$
    – Valentas
    Apr 3 '19 at 14:35

Hopefully I've understood your question correctly.

Assuming your text file looks like this?


You can read that in using the readLines() function:

cols <- readLines("name_of_text_file")

Which returns cols as a vector of those names:

> cols
[1] "GeneName1" "GeneName2"

Which can then be used to subset the data frame as per your example:

mydata[ , cols]
  • $\begingroup$ Thank you, Jerb, that worked! However, I get this error if there is a gene in my cols list that is not found in the dataset. Error in [.data.frame(sensory, , cols) : undefined columns selected Do you know what I could add to the script to make it skip over any genes it does not find? $\endgroup$
    – julie
    Apr 8 '19 at 11:59
  • 1
    $\begingroup$ No probs. You could subset cols with an %in% expression thus: mydata[, cols[cols %in% names(mydata)]] $\endgroup$
    – Jerb
    Apr 8 '19 at 12:45

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.