R中如何在同一个excelsheet中导入两组数据?

How to import two sets of data in the same excel sheet in R?

目前在一个 excel sheet 我有一个数据块,从第 1 行开始,最后一行总是变化,但通常在 18 或 19 左右。一旦第一组data ends然后有两个空白行,第二个数据集开始,也是18或19左右。两个数据集的列数相同,共享相同的headers。我将 excel sheet 保存为 csv。然后在 R 中我会做 read.csv(),但是在我做完之后我不知道如何将两组数据分开成单独的 data.frames。

我意识到我可以将第二个数据集复制并粘贴到单独的 excel sheet 中并读入,但我不想那样做。我想保持 excel sheet 不变。

excelsheet的例子:

A  B  C  D   # FIRST DATA SET
1  2  3  4


A  B  C  D   # SECOND DATA SET
5  6  7  8

我们将不胜感激,如果需要更多信息,请告诉我。

这取决于。如果你知道第一个块结束的行号而第二个没有header,你可以做

mydata <- read.csv('yourfile.csv', header=TRUE)
block1 <- mydata[1:18,]
block2 <- mydata[19:nrow(mydata)]

如果你的块有不同的结构,比如不同的列数,每个块都有自己的列名,那么最好使用readLines()函数,并将结果传递给read.csv。你怎么区分这些积木?

回复您的评论: 然后就相对容易了。正如 Kota Mori 指出的那样,用空白点赞阅读你的数据。假设您的第一列有数值,并且除了数据集之间没有 NA,

mydata <- read.table('yourfile.csv', header=TRUE, blank.lines.skip = FALSE)
blines <- which(is.na(mydata[,1]))
data1 <- mydata[1:(blines[1]-1),]
data2 <- mydata[(blines[length(blines)]+1):nrow(mydata),]

您应该根据您的数据更改搜索模式。

这取决于你有什么数据文件。
如果两个数据之间有两个空行,让 blank.lines.skip = FALSEread.csv() 中可以让您找到拆分数据的位置。

可能有很多方法可以实现您想要的。也许只是使用 readLines 阅读它,然后确定两个空行的索引并在两个子集上使用 read.csv

txt <- readLines(con=textConnection("1,2,3,4
5,6,7,8


a,b,c,d,e
f,g,h,i,j"))
read.csv(header=F, text=txt[1:which.max(txt=="")])
#   V1 V2 V3 V4
# 1  1  2  3  4
# 2  5  6  7  8
read.csv(header=F, text=txt[(which.max(txt=="")+2):length(txt)])
#   V1 V2 V3 V4 V5
# 1  a  b  c  d  e
# 2  f  g  h  i  j

关于您添加的玩具示例:

txt <- readLines(con=textConnection("A  B  C  D #1st
1  2  3  4


A  B  C  D #2nd
5  6  7  8"))
txt <- sub("\s+#.*$", "", txt) # delete comments if necessary
read.table(header=T, check.names = F, text=txt[1:which.max(txt=="")])
#   A  B  C  D
# 1 1  2  3  4
read.table(header=T, check.names = F, text=txt[(which.max(txt=="")+2):length(txt)])
#   A  B  C  D
# 1 5  6  7  8