需要标记列以摆脱 NA 列:NAs numbered

need to label columns in order to get rid of NA columns: NAs numbered

我有两个文件必须link放在一起。

   > 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'.

删除它们

我能否以某种方式使用正则表达式连续删除 NA 列...?我的想法是:

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

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

我认为您正在寻找以下正则表达式:

# 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 开头) invert=TRUE 取这些索引的补码(那些不匹配模式的) .

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

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