需要标记列以消除NA列:编号为

时间:2016-05-05 12:41:40

标签: regex r file-handling na

我有两个文件,我必须链接在一起。

   > 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&#39;”的价值观。不幸的是,以下命令并不起作用......

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

这是因为列的重新标记仅将具有NA值的列重新标记为&#34; NA.1,NA.2,NA.3 ....&#34;所以我无法用“na.omit”来摆脱它们。

enter image description here

我可以以某种方式使用正则表达式连续摆脱NA列......?我的想法如下:

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

我不熟悉正则表达式......有什么提示吗?

2 个答案:

答案 0 :(得分:2)

这可以通过使用grepl模式来匹配NA后跟一个点(.)后跟一个或多个数字(\\d+)来完成名称,否定逻辑输出并使用它来对列进行子集化。

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

答案 1 :(得分: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函数查找与模式匹配的变量的索引&#34; ^ NA&#34; (名称以NA开头)invert = TRUE采用这些索引的补码(那些与模式不匹配的索引)。