R:读取文件,拆分为多个数据帧

时间:2015-02-22 01:43:48

标签: r

我有一个以下列方式布局的文件:

# Query ID 1
# note
# note
tab delimited data across 12 columns
# Query ID 2
# note
# note
tab delimited data across 12 columns

我想将此数据导入R,以便每个查询都是自己的数据帧。理想情况下,作为数据框列表,查询ID作为列表中每个项目的名称。我一直在寻找,但我没有看到一个很好的方法来做到这一点。这可能吗? 感谢

1 个答案:

答案 0 :(得分:1)

我们使用逗号而不是制表符来更容易查看并将文件正文放在字符串中,但除了做出明显的更改外,请尝试此操作。首先,我们使用readLines读取文件,然后确定标题的位置,并创建一个grp向量,该向量与文件中的行具有相同数量的元素,其值是该行的标题。最后拆分行,并将Read应用于每个组。

但除此之外试试这个:

# test data

Lines <- "# Query ID 1
# note
# note
1,2,3,4,5,6,7,8,9,10,11,12
1,2,3,4,5,6,7,8,9,10,11,12
# Query ID 2
# note
# note
1,2,3,4,5,6,7,8,9,10,11,12
1,2,3,4,5,6,7,8,9,10,11,12"

L <- readLines(textConnection(Lines)) # L <- readLines("myfile")
isHdr <- grepl("Query", L)
grp <- L[isHdr][cumsum(isHdr)]
# Read <- function(x) read.table(text = x, sep = "\t", fill = TRUE, comment = "#")
Read <- function(x) read.table(text = x, sep = ",", fill = TRUE, comment = "#")
Map(Read, split(L, grp))

,并提供:

$`# Query ID 1`
  V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12
1  1  2  3  4  5  6  7  8  9  10  11  12
2  1  2  3  4  5  6  7  8  9  10  11  12

$`# Query ID 2`
  V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12
1  1  2  3  4  5  6  7  8  9  10  11  12
2  1  2  3  4  5  6  7  8  9  10  11  12

不需要包裹。