【问题标题】:How to import two sets of data in the same excel sheet in R?如何在R中的同一个Excel工作表中导入两组数据?
【发布时间】:2016-02-15 11:39:26
【问题描述】:

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

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

excel表格示例:

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


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

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

【问题讨论】:

  • 如果可能,您可能希望添加数据(或玩具数据集)。

标签: r csv dataframe read.csv


【解决方案1】:

可能有很多方法可以归档您想要的内容。也许只是使用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

【讨论】:

  • 感谢您的回答。我用玩具数据集编辑了我的问题。
  • 谢谢,我又加了一个例子。
【解决方案2】:

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

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),]

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

【讨论】:

  • 感谢您的回答我已经编辑了我的问题。此外,由于第一个数据集的行不同,我不知道第二个数据集何时开始的行号。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2021-12-28
    • 2018-03-30
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2022-12-13
    相关资源
    最近更新 更多