Как получить «чистый» список имен вкладок Excel в R с помощью RODBC? - PullRequest
0 голосов
/ 17 января 2012

Я новичок в R и еще новее использую его с Excel.Я хочу получить список всех имен рабочих листов (примечания, веса, длины) в файле .xls.Вы можете увидеть то, что я пробую ниже - проблема в том, что на выходе по какой-то причине в конце есть знак доллара, а иногда он также заключен в одинарные кавычки.

FileToImport <- "C:\\folder\\filetoimport.xls"

z <- odbcConnectExcel(FileToImport, readOnly = TRUE)

sqlTables(z)
TABLE_CAT TABLE_SCHEM         TABLE_NAME   TABLE_TYPE REMARKS
1 C:\\folder\\filetoimport.xls <NA>     Notes$ SYSTEM TABLE    <NA>
2 C:\\folder\\filetoimport.xls <NA> 'Weights$'        TABLE    <NA>
3 C:\\folder\\filetoimport.xls <NA> 'Lengths$'        TABLE    <NA>

sqlTables (z) [, "TABLE_NAME"]

[1] "Notes$"             "'Weights$'" "'Lengths$'"

Я мог бы попытаться очистить эти символы, но я не знаю, как это сделать, так какформат кавычек не согласуется - некоторые из книг - «СИСТЕМНЫЕ ТАБЛИЦЫ», а некоторые - просто «ТАБЛИЦЫ».Может кто-нибудь объяснить, в чем разница между этими листами, и дать мне представление о том, как воссоздать только «чистые» имена вкладок?

Ответы [ 2 ]

2 голосов
/ 27 января 2012

Благодаря приведенному выше толчку в правильном направлении мне удалось использовать регулярные выражения, чтобы получить имена рабочих листов в нужном выводе (без каких-либо знаков препинания).

gsub("[[:punct:]]","",sqlTables(z)[,"TABLE_NAME"]) 
[1] "Sheet1" "Sheet2" "Sheet3"
0 голосов
/ 17 января 2012

У меня нет большого опыта работы с RODBC, но вы имеете в виду следующий результат под clean ?

 data.frame(sqlTables(z))$TABLE_NAME
 [1] "Sheet1$"  "Sheet2$"  "Sheet3$"  "ZRDaten1"

если вы сохраните это в векторе, скажем b, вы можете получить к ним доступ с помощью z[i]. Если вам нужен только определенный тип, как насчет:

 na.omit(ifelse(data.frame(sqlTables(z))$TABLE_TYPE=='SYSTEM TABLE', data.frame(sqlTables(z))$TABLE_NAME, NA))
 [1] "Sheet1$" "Sheet2$" "Sheet3$"

по общему признанию, не элегантный ....

...