如何读取由多个不同长度的注释数据帧组成的单个 .csv 文件作为列表?
How to read a single .csv file that consists of multiple commented data frames of different lengths as a list?
我尝试读取具有以下结构的 csv 文件:
是否可以将其读取并保存为单个列表,其中每个条目都称为 Table A -- 每月,Table B -- 每月,Table C --每月等等?此外,每个列表条目都需要是一个带有 header "col1,col2,col3" 的数据框。
我知道如何跳过开头的文字,但我如何去掉最后的"Copyright"?
如果有任何建议可以解决我的问题,我将不胜感激。提前致谢!
假设:
- 末尾注释中可重复显示的输入
- table 名称行是唯一带有 --
的行
- table 内容和 header 行是唯一带有逗号的行
- 我们可以删除任何以 ,
开头的行中的前导 ,
将行读入 L
(实际上用文件名替换参数)并提取 table 名称、标题和内容行,并删除任何前导逗号 goodLines
。确定 table 名称 iNames
在其中的位置,然后获取 Names
本身。然后将 goodLines(table 名称除外)拆分为字符向量列表 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"
我尝试读取具有以下结构的 csv 文件:
是否可以将其读取并保存为单个列表,其中每个条目都称为 Table A -- 每月,Table B -- 每月,Table C --每月等等?此外,每个列表条目都需要是一个带有 header "col1,col2,col3" 的数据框。
我知道如何跳过开头的文字,但我如何去掉最后的"Copyright"?
如果有任何建议可以解决我的问题,我将不胜感激。提前致谢!
假设:
- 末尾注释中可重复显示的输入
- table 名称行是唯一带有 -- 的行
- table 内容和 header 行是唯一带有逗号的行
- 我们可以删除任何以 , 开头的行中的前导 ,
将行读入 L
(实际上用文件名替换参数)并提取 table 名称、标题和内容行,并删除任何前导逗号 goodLines
。确定 table 名称 iNames
在其中的位置,然后获取 Names
本身。然后将 goodLines(table 名称除外)拆分为字符向量列表 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"