我有两个文件,我必须链接在一起。
> 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”来摆脱它们。
我可以以某种方式使用正则表达式连续摆脱NA列......?我的想法如下:
subset(df, any df column name that does not == 'NA' followed by a 1-3 digit number)
我不熟悉正则表达式......有什么提示吗?
答案 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采用这些索引的补码(那些与模式不匹配的索引)。