将连续文本文件读入data.frame

时间:2017-02-07 14:31:58

标签: r dataframe readfile

我有一个只有一列的文本文件。它就像:

sample1

color 12
length 34
validity 90



sample2

color 15
length 20
validity 120



sample3

color 34
validity 79

样本之间有3行,样本id与其属性之间有1行。此外,对于sample3,缺少长度记录。

我想将此文件读入R data.frame,使其看起来像:

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

1 个答案:

答案 0 :(得分:0)

您有数据清理问题。这是我的解决方案。

我复制并粘贴了你的" TXT"将文件存入Mac上的空白TextEdit文档,并将其另存为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)然后解决。