2016-05-05 2 views
1

У меня есть два файла, которые мне нужно связать.нужно пометить столбцы, чтобы избавиться от столбцов NA: нумеруются NAs

> dim(sample.details) 
    [1] 656 18 
    > dim(E.rna) 
    [1] 47323 656 

Моя задача - обозначить имена столбцов одного фрейма данных файла значениями в столбце от другого.

ptr <- match(colnames(E.rna), sample.details$my_category_2) 
sample.details <- sample.details[ptr,] # reorder to correspond to rows of E.RNA 
rownames(E.rna)<-outcome 

Моя проблема в том, что теперь, когда я правильно обозначил столбцы E.rna. Мне нужно избавиться от значений, которые являются «NA». Ниже команда не работает, к сожалению, ...

E.rna_conditions_cleaned<-subset(E.rna, !is.na(colnames(E.rna))) 

Это происходит потому, что Перемаркировка столбцов только столбцы этикетки для со значениями NA как «NA.1, NA.2, NA.3 ... . «Поэтому я не могу избавиться от них с помощью« na.omit ».

enter image description here

Могу ли я каким-то образом использовать регулярные выражения, чтобы последовательно избавиться от колонок NA ...? Моя идея была бы такой:

subset(df, any df column name that does not == 'NA' followed by a 1-3 digit number) 

Я не знаком с регулярным выражением ... Любые советы?

+1

Можете ли вы показать небольшой воспроизводимый пример и ожидаемый выход? Попробуйте 'df [! Grepl ("^NA \\. \\ d + ", names (df))]' В 'подмножестве' вы должны использовать' select' для выбора столбцов, и он может быть именованным или числовым вектор. – akrun

+0

Привет, Akrun Итак, вы имеете в виду: «E.rna_conditions_cleaned <-subset (E.rna,! Is.na (colnames (E.rna)), select = df [! Grepl ("^NA \\. \\ d + " , имена (df))]) "? Я обновлю вопрос, спасибо –

+0

Спасибо Akrun Я сделал это с помощью "E.rna_conditions_cleaned <-E.rna_conditions_cleaned [! Grepl ("^NA \\. \\ d + ", имена (E.rna_conditions_cleaned))]" –

ответ

2

Это может быть сделано с помощью grepl с узором, который соответствует NA, за которым следует точка (.), а затем с помощью одного или более цифр (\\d+) на имена столбцов, сводит на нет логического вывода и использовать его для подмножества столбцов.

E.rna_conditions_cleaned<-E.rna_conditions_cleaned[!grepl("^NA\\.\\d+", 
      names(E.rna_conditions_cleaned))] 
0

Я думаю, что вы ищете следующее регулярное выражение:

# build sample df 
E.rna <- data.frame(U.95=1:5, HC.54=letters[6:10], NA.5=rnorm(5), KD.77=runif(5)) 

# get rid of unwanted variables 
E.rna_conditions_cleaned <- E.rna[, grep("^NA", names(E.rna), invert=TRUE)] 

grep функция находит индексы переменных, которые соответствуют шаблону «^ NA» (имена которых начинаются с NA) инвертный = TRUE принимает дополнение из этих индексов (те, которые не соответствуют шаблону).

Смежные вопросы