2017-02-07 21 views
1

У меня есть текстовый файл, который имеет только один столбец. Это как:Чтение в текстовом файле в data.frame

sample1 

color 12 
length 34 
validity 90 



sample2 

color 15 
length 20 
validity 120 



sample3 

color 34 
validity 79 

Существует 3 линии между выборками и 1 строка между идентификатором образца и его атрибутом. Кроме того, для образца 3 отсутствует запись длины.

Я хочу прочитать этот файл в R data.frame так, что он выглядит следующим образом:

 sample1 sample2 sample3 
color 12  15  34 
length 34  20  NA 
validity 90  120  79 
+0

Пожалуйста, предоставьте 'dput' ваших данных. –

+1

@DavidArenburg У меня нет объекта R. У меня есть только файл .txt, который я хочу прочитать в R. – Yan

+0

Получил его. Попробуйте 'library (data.table); dcast (fread ("test.txt", fill = TRUE) [! is.na (V2)], sample1 ~ paste0 ("sample_", rowid (sample1))) 'возможно. –

ответ

0

У вас есть проблемы очистки данных. Вот мое решение для вас.

Я скопировал и вставил ваш файл «TXT» в пустой документ TextEdit на Mac и сохранил его как file.txt. Порядок, указанный в вашем файле TXT, не требуется:

data <- unlist(read.table("file.txt", header=F, sep="\t", stringsAsFactors=F), use.names=F) 
data 

sample_names <- data[grep("sample", data), drop=T] 
sample_names 
## [1] "sample1" "sample2" "sample3" 

color <- data[grep("color", data), drop=T] 
color 
## "color 12" "color 15" "color 34" 

length <- data[grep("length", data), drop=T] 
length #note missing term, and requires manual coding 
## [1] "length 34" "length 20" 

length <- c(length, NA) 
length 
## [1] "length 34" "length 20" NA 

validity <- data[grep("validity", data), drop=T] 
validity 
## [1] "validity 90" "validity 120" "validity 79" 

## Assemble into data.frame: 
assembled_df <- rbind(color, length, validity) 
colnames(assembled_df) <- sample_names #update column names 
assembled_df 
##   sample1  sample2  sample3  
## color "color 12" "color 15"  "color 34" 
## length "length 34" "length 20" NA   
## validity "validity 90" "validity 120" "validity 79" 

Обратите внимание, что код не может быть обобщен. Речь идет о том, как будет выглядеть фактический файл TXT. Важно научиться: 1) знать свои данные (что вы делаете), 2) разработать стратегию, 3), а затем решение.

+0

Большое вам спасибо за быстрый ответ! Но мне было интересно, есть ли обобщаемое решение. Это образец игрушки, который я сформулировал в этом вопросе. Но мои настоящие данные еще более грязные. Имена образцов не имеют шаблона (некоторые только цифры, а некоторые - символы + цифры). Поэтому я не могу использовать grep. – Yan

+0

Должно быть общее решение, хотя было бы очень сложно, если бы ваши «грязные» данные не имели четкой картины. Удачи. –

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

  • Нет связанных вопросов^_^