2015-06-22 3 views
1

Мне интересно пропустить некоторые строки моего фрейма данных перед именами заголовков. Как я могу это сделать, пропустив все строки до ID_REF, или если ID_REF нет, проверьте шаблон ILMN_ и удалите все строки, сохраняя немедленные первые, если не содержащие #.Пропустить некоторые строки с fread

# GEOarchive matrix file.    
ID_REF 1688628068_A.AVG_Signal 1688628068_A.Avg_NBEADS 1688628068_A.BEAD_STDERR 1688628068_A.Detection Pval 
ILMN_1343291 62821.84   135        413.9399      0 
ILMN_1343292 3255.167   131        47.76587      0 
ILMN_1343293 42924.91   152        539.3026      0 
ILMN_1343294 55255.21   100        746.1457      0 
+1

Похоже, что у вас больше имен столбцов, чем столбцов. Является ли '1688628068_A.Detection Pval' единственным столбцом ?. также, если файл имеет '#', который нужно пропустить, просто прочитайте его. 'read.table ('yourfile.txt', header = TRUE, fill = TRUE). – akrun

+0

@akrun Да, это единственный столбец – Hashim

+0

Один из вариантов заключается в том, чтобы изменить имя столбца в файле на «1688628068_A.Detection_Pval» и прочитать без 'fill = TRUE' – akrun

ответ

3

В Linux, вы можете использовать awk с fread или он может быть передан с read.table. Здесь я изменил разделитель , с помощью awk

pth <- '/home/akrun/file.txt' #change it to your path 
v1 <- sprintf("awk '/^(ID_REF|LMN)/{ matched = 1} matched {$1=$1; print}' OFS=\",\" %s", pth) 

и чтения с fread

library(data.table) 
fread(v1) 
#   ID_REF 1688628068_A.AVG_Signal 1688628068_A.Avg_NBEADS 
#1: ILMN_1343291    62821.840      135 
#2: ILMN_1343292    3255.167      131 
#3: ILMN_1343293    42924.910      152 
#4: ILMN_1343294    55255.210      100 
# 1688628068_A.BEAD_STDERR 1688628068_A.Detection_Pval 
#1:    413.93990       0 
#2:     47.76587       0 
#3:    539.30260       0 
#4:    746.14570       0 

Или с помощью read.table

read.table(pipe(v1), header=TRUE, sep=',', check.names=FALSE) 
#  ID_REF 1688628068_A.AVG_Signal 1688628068_A.Avg_NBEADS 
#1 ILMN_1343291    62821.840      135 
#2 ILMN_1343292    3255.167      131 
#3 ILMN_1343293    42924.910      152 
#4 ILMN_1343294    55255.210      100 
# 1688628068_A.BEAD_STDERR 1688628068_A.Detection_Pval 
#1    413.93990       0 
#2     47.76587       0 
#3    539.30260       0 
#4    746.14570       0 

ПРИМЕЧАНИЕ: Я изменил имя столбца 1688628068_A.Detection Pval в 1688628068_A.Detection_Pval

По некоторым причинам дополнительные пробелы создают проблемы с fread. С read.table это не проблема. Таким образом, следующее также отлично работает с read.table

v2 <- sprintf("awk '/^(ID_REF|ILMN)/{ matched = 1} matched { print}' %s", pth) 

read.table(pipe(v2), header=TRUE, check.names=FALSE) 
#  ID_REF 1688628068_A.AVG_Signal 1688628068_A.Avg_NBEADS 
#1 ILMN_1343291    62821.840      135 
#2 ILMN_1343292    3255.167      131 
#3 ILMN_1343293    42924.910      152 
#4 ILMN_1343294    55255.210      100 
# 1688628068_A.BEAD_STDERR 1688628068_A.Detection_Pval 
#1    413.93990       0 
#2     47.76587       0 
#3    539.30260       0 
#4    746.14570       0 
+1

Спасибо, он отлично работает – Hashim

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