【问题标题】:How to import excel data into R using column name and row name如何使用列名和行名将excel数据导入R
【发布时间】:2012-08-11 13:45:16
【问题描述】:

我是 R 新手,想知道如何使用行名和列名将 excel 数据导入 R。 具体来说,我需要一个excel文件中的多个工作表中的数据子集。我可以使用行名和列名来识别某些数据单元并将其提取到 R 吗?

Worksheet 1
----------
* X Y Z 
A 1 2 2
B 1 1 1
C 1 3 4
D 4 2 2
E 2 2 2 
----------
Worksheet 2
----------
*  X Y1 Z1 
A 1  2  2
B 1  2  3
C 1  3  4
D 4  1  1
E 2  1  1 

例如在上面的电子表格中 我如何使用工作表 1 中的行名和列名 (D,Y) (D,Z) (E,Y) (E,Z) 提取数据 (2,2,2,2)

如何使用工作表 2 中的行名和列名 (D,Y1) (D,Z1) (E,Y1) (E,Z1) 提取数据 (1,1,1,1)?

感谢您提供的任何帮助

巴里

【问题讨论】:

  • 您只需要将一个子集导入 R 还是可以将整个事物和子集导入 R?

标签: excel r import


【解决方案1】:

有几个包提供了将 Excel 数据导入 R 的功能;请参阅R data import/export 文档。

我发现xlsx 包很有用(它可以读取 .xls 和 .xlsx 文件)。我不相信它会接受行/列名称作为输入,但它会接受它们的数值(例如第 1 行,第 4 列)。在您的情况下,假设 X、Y 和 Z 对应于第 1-3 列,这样的事情应该可以工作:

library(xlsx)
# first example subset; call it ss1
# assume first row is not a header; otherwise requires header = T
ss1 <- read.xlsx("myfile.xlsx", sheetIndex = 1, rowIndex = 4:5, colIndex = 2:3)

# second example subset; call it ss2
# just the same except worksheet index = 2
ss2 <- read.xlsx("myfile.xlsx", sheetIndex = 2, rowIndex = 4:5, colIndex = 2:3)

但是,您需要对自己的文件进行试验,直到一切正常。您也可以指定 sheetName 但我发现 sheetIndex 通常工作更可靠,一旦你找出每张纸的正确索引。并注意第一行是否是标题。

说了这么多:我的首选是将工作表导出为文本格式,例如 CSV,使用 shell 工具(剪切、头部、尾部)获取所需的行/列并将其导入 R。

【讨论】:

  • 我建议你放弃xlsx,改用XLConnect。它使用相同的 Java 库来操作 Excel,但Inf 对用户更友好。
【解决方案2】:

@Andrie 提到了 XLConnect 包,它是一个非常有用的 R 和 Excel 之间的 I/O 包,可以在 Excel 工作表中选择区域。

我在我的 Dropbox 公共文件夹中创建了一个与您类似的 Excel 文件,您可以下载 example.xls 文件 here

require(XLConnect)

## A5:C5 correspond to (D,Y) (D,Z) (E,Y) (E,Z)  in your example
selectworksheet1 <- readWorksheetFromFile("/home/ahmadou/Dropbox/Public/example.xls",
                               sheet = "Worksheet1", 
                               region = "A5:C5", header = FALSE)

selectworksheet1
##  Col0 Col1 Col2
## 1    2    2    2


## B4:C5 correspond to (D,Y1) (D,Z1) (E,Y1) (E,Z1) in the second example
selectworksheet2 <- readWorksheetFromFile("/home/ahmadou/Dropbox/Public/example.xls",
                         sheet = "Worksheet2", 
                         region = "B4:C5", header = FALSE)

selectworksheet2
##   Col0 Col1
## 1    1    1
## 2    1    1

unlist(selectworksheet2)
## Col01 Col02 Col11 Col12 
##    1     1     1     1 

【讨论】:

    猜你喜欢
    • 2012-07-10
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 2022-01-18
    • 2021-05-22
    • 1970-01-01
    相关资源
    最近更新 更多