我有一个CSV文件,其中包含许多具有相同列的数据框,例如:
x y z
1 2 3
3 2 1
x y z
1 3 2
2 3 1
2 1 3
我想要做的是将这些数据加载到数据帧列表中。例如,像这样:
$`1`
x y z
1 2 3
3 2 1
$`2`
x y z
1 3 2
2 3 1
2 1 3
在R中有没有快速的方法呢?
答案 0 :(得分:3)
我们可以使用readLines
阅读文件,创建'索引',split
带有'索引'的行,然后使用read.table
或read.csv
<阅读/ p>
lines <- readLines(yourfile)
index <- cumsum(lines==lines[1])
lapply(split(lines,index), function(x) read.table(text=x, header=TRUE))
#$`1`
# x y z
#1 1 2 3
#2 3 2 1
#$`2`
# x y z
#1 1 3 2
#2 2 3 1
#3 2 1 3
答案 1 :(得分:3)
一种解决方案是按原样读取文件:
df = read.table(file='clipboard', sep=' ')
# V1 V2 V3
#1 x y z
#2 1 2 3
#3 3 2 1
#4 x y z
#5 1 3 2
#6 2 3 1
#7 2 1 3
在该列上添加一列并拆分:
df$V4 = cumsum(df$V1=='x')
lapply(split(df, df$V4), function(u) setNames(u[2:nrow(u), 1:3], c('x','y','z')))
#$`1`
# x y z
#2 1 2 3
#3 3 2 1
#$`2`
# x y z
#5 1 3 2
#6 2 3 1
#7 2 1 3