我是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
Run Code Online (Sandbox Code Playgroud)
例如,在上述的电子表格我怎么能提取数据(2,2,2,2)在工作表1使用行和列名(d,Y)(d,Z)(E,Y)(E,Z)
如何使用工作表2中的行和列名称(D,Y1)(D,Z1)(E,Y1)(E,Z1)提取数据(1,1,1,1)?
感谢您提供的任何帮助
巴里
@Andrie提到了XLConnect包,它是R和Excel之间I/O的一个非常有用的包,可以在Excel工作表中选择区域.
我在Dropbox公共文件夹中创建了一个类似你的Excel文件,你可以在这里下载example.xls文件.
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
Run Code Online (Sandbox Code Playgroud)
有几个包提供了将 Excel 数据导入到 R 的功能;请参阅R 数据导入/导出文档。
我发现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)
Run Code Online (Sandbox Code Playgroud)
但是,您需要尝试自己的文件,直到一切按预期工作。您还可以指定sheetName,但我发现一旦您找出每个工作表的正确索引,sheetIndex通常会更可靠地工作。并注意第一行是否是标题。
话虽如此:我的首选选项是将工作表导出为文本格式(例如 CSV),使用 shell 工具(cut、head、tail等)获取所需的行/列并将其导入到 R。