2016-03-25 46 views
1

我对R相对来说比较新,我在这里找到了很多答案,但是这个问题让我在尝试了两天后难倒了。R - 只保留列名与字符串匹配的列

我有列名这样的数据帧:

目标ID sample1.beta sample1.avg sample1.error sample1.pval sample2.beta sample2.avg sample2.error sample2.pval

这对于重复数千个样本。我需要为每一段数据创建多个单独的数据帧:一个用于测试版,一个用于平均值,一个用于错误,一个用于pval。我还需要在所有数据框中保留具有TargetID的第一列。由此产生的数据帧将有像列名:

目标ID sample1.beta sample2.beta sample3.beta

目标ID sample1.pval sample2.pval sample3.pval

我有找到数据框子集的答案,但它们似乎不适用于选择包含特定字符串的所有列(并保留第1列)。

我一直在探索在使用awk导入到R之前,这是否更好地使用txt文件完成。

+0

这也不是没有重复的例子清楚。但你可以试试'library(data.table); (setDT(df1),measure = patterns(“beta $”,“avg $”,“error $”,“pval $”))' – akrun

回答

1

grepl使用或grep中的“[”与包括`目标ID并且施加到名字子集串(dfrm_name)。:一个图案的第二位置

avg_sub <- dfrm[ , grepl("^TargetID|avg$", names(dfrm) ] 

的“^”图案的开头匹配的字符串,而“4”模式匹配字符串的末尾。

+0

谢谢!看起来这是诀窍! – user3685158

1

你可以尝试(如你不提供使用mtcars示例数据):

library(dplyr) 
# select the column mpg and all the columns containing an r 
head(mtcars %>% select(mpg, contains("r"))) 
        mpg drat gear carb 
Mazda RX4   21.0 3.90 4 4 
Mazda RX4 Wag  21.0 3.90 4 4 
Datsun 710  22.8 3.85 4 1 
Hornet 4 Drive 21.4 3.08 3 1 
Hornet Sportabout 18.7 3.15 3 2 
Valiant   18.1 2.76 3 1