如何读取包含多个具有不同长度的注释数据帧的单个.csv文件作为列表?

时间:2019-01-11 12:38:35

标签: r csv read.table read.csv

我尝试读取具有以下结构的csv文件:

my example

是否可以将其读取并保存为单个列表,其中每个条目都称为表A-每月,表B-每月,表C-每月等等?同样,每个列表条目都必须是带有标题“ col1,col2,col3”的数据帧。

我知道如何从头开始跳过文本,但是如何在结尾处摆脱“版权”呢?

我非常感谢您提出解决问题的建议。预先感谢!

1 个答案:

答案 0 :(得分:1)

假设:

  • 结尾处的注释中可重复显示的输入
  • 表名称行是唯一带有-
  • 的行
  • 表格内容和标题行是仅有逗号的行
  • 我们可以删除以开头的任何行中的开头,

将行读入L(实际上用文件名替换参数)并提取表名,标题和内容行,并删除任何以goodLines开头的逗号。确定表名iNames的位置,然后获取Names本身。然后将除表名以外的goodLines拆分为字符向量s的列表,并在正确设置组件名称时读取每个字符向量。

# L <- readLines("myfile.dat")
L <- readLines(textConnection(Lines))
goodLines <- sub("^,", "", grep("--|,", L, value = TRUE)) 
iNames <- grepl("--", goodLines)
Names <- sub(" --.*", "", goodLines[iNames])
s <- split(goodLines[!iNames], cumsum(iNames)[!iNames])
setNames(lapply(s, function(x) read.csv(text = x)), Names)

给出以下数据帧列表:

$`Table A`
  a b c
1 1 2 3
2 4 5 6

$`Table B`
  a b c
1 1 2 3
2 4 5 6

注意

Lines <- "
junk
junk

Table A -- Monthly
,a,b,c
1,2,3
4,5,6

Table B -- Monthly
,a,b,c
1,2,3
4,5,6

junk
junk"