Задания для самостоятельной работы
1. Дописать в файл data.xlsx(из разобранного выше задания 2)на новый лист "Cars" таблицу из зарезервированной в Rпеременной cars с данными о скоростях и длинах тормозных путей автомобилей Ford.
2. После загрузки библиотеки "ggplot2" в R становятся доступныданные под именем diamonds, в которых приведены статистические исследования алмазов. Создать xlsx-файл, содержащий данную таблицу diamonds.Указание: после того, как у вас ничего не получится, попробуйте все-таки использовать преобразование типов: Data <- as . data . frame ( diamonds )
3. Скачать из интернета и сохранить в файле money.xlsx данные за последний полный месяц о курсеUSDи EUR и записать их в файл money.rdsне используя буфер обмена.Проверить результат, считав обратно данные из money.rds и отправив их в какой-нибудь новый xlsx-файл. Указание. В ряде случаев может потребоваться произвести автозамену точки на запятую в Excel , если данные о курсах валют содержат десятичным разделителем точку.
4. * Создать любым способом файлы matrix.xlsx и matrix.rds, содержащие в себе матрицу размера , элементы которой определяются формулой:
,
где t wx:val="Cambria Math"/><w:i/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><m:t>-</m:t></m:r></m:oMath></m:oMathPara></w:p><w:sectPr wsp:rsidR="00000000"><w:pgSz w:w="12240" w:h="15840"/><w:pgMar w:top="1134" w:right="850" w:bottom="1134" w:left="1701" w:header="720" w:footer="720" w:gutter="0"/><w:cols w:space="720"/></w:sectPr></w:body></w:wordDocument>"> номер строки, а номер столбца элемента матрицы.
|
|
Приложение
Космос (для отличников)
Часто по итогу обработки Excel-данных вычислительными средствами R требуется записать результат не на новый лист, а в одну или несколько заранее определенных ячеек уже существующего листа, на котором, быть может, эти данные используются для последующих вычислений в других ячейках. Также часто необходимо считывать не весь лист, а определенную ячейку или их некоторую группу.
В этом разделе мы и обсудим возможности такого тонкого взаимодействия R с Excel, кстати, закладывающем основу полной автоматизации вычислений.
Задание A. Из файла data.xlsxс листа "Лист1" считать данные ячеек B1 и C4.
Решение. Напомним, что "Лист1"файла data.xlsx содержит фрагмент таблицы курса валют:
Причем, ячейка B1 имеет координаты (1,2)и равна "USD", а ячейка C4 имеет координаты (4, 3) и равна 68,1678.
Изучите, но не копируйте и незапускайте в R, следующий ниже перечень команд, чтобы хоть немного понять последующие за перечнем несколько строчек кода.
PATH <- "C:\\Users\\User\\Desktop\\data.xlsx" # Путькфайлу
Wbook<- loadWorkbook(PATH) # Скачали книгу по пути PATH в переменную Wbook
Sheet<- Wbook$getSheet("Лист1") # Сохранить"Лист1" книги Wbookв переменную Sheet
|
|
Row<- getRows(Sheet, 4) # Сохранить 4-ую строку листа Sheet в переменную Row
Cell<- getCells(Row, 3) # Сохранили 3-ю ячейку строки Row в переменную Cell
X<- lapply(Cell, getCellValue, encoding="UTF-8") # Записали содержимое ячейки Cell в переменную X
Итак,теперь скопируем и запустимв Rнебольшой, но весьма замысловатый, код, который решает задачу чтения содержимого ячеек B1иC4:
PATH <- "C:\\Users\\User\\Desktop\\data.xlsx" # Путькфайлу
Wbook<- loadWorkbook(PATH) # Скачали книгу по пути PATH в переменную Wbook
Sheet<- Wbook$getSheet("Лист1") # Сохранить"Лист1" книги Wbookв переменную Sheet
# Сразу записываемзначение ячейки (1,2) на листе Sheet в переменную B1:
B1<- mapply(getCellValue, getCells(getRows(Sheet, 1), 2), encoding="UTF-8"); B1 # СодержимоеячейкиB1
# Сразу записываемзначение ячейки (4, 3) на листе Sheet в переменную C4:
C4<- mapply(getCellValue, getCells(getRows(Sheet, 4), 3), encoding="UTF-8"); C4 # СодержимоеячейкиC4
Срезультатомвконсоли:
> B1 <- mapply(getCellValue, getCells(getRows(Sheet, 1), 2), encoding="UTF-8"); B1 # Содержимоеячейки B1
1.2
"USD"
> C4 <- mapply(getCellValue, getCells(getRows(Sheet, 4), 3), encoding="UTF-8"); C4 # Содержимоеячейки C4
4.3
68.1678
Обратите внимание, что у считанных значений переменных B1 иC4 имеются атрибуты, равные координатам соответствующихячеек: 1.2 и 4.3
|
|
Даже если не совсем понятно, как работает команда чтения, просто используйте конструкцию:
mapply(getCellValue, getCells(getRows(Sheet, i), j), encoding="UTF-8")
чтобы прочитать содержимое ячейки из t wx:val="Cambria Math"/><w:i/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><m:t>-</m:t></m:r></m:oMath></m:oMathPara></w:p><w:sectPr wsp:rsidR="00000000"><w:pgSz w:w="12240" w:h="15840"/><w:pgMar w:top="1134" w:right="850" w:bottom="1134" w:left="1701" w:header="720" w:footer="720" w:gutter="0"/><w:cols w:space="720"/></w:sectPr></w:body></w:wordDocument>"> строки и столбца на листе Sheet.
Полезно также знать, что группу рядом стоящих ячеек можно считать буквально одной строчкой. Например, чтобы считать всю таблицу значений валют (это 2–4 строки и 2–3 столбцы) в переменную Tabl, нужно запустить команду:
Tabl<- mapply(getCellValue, getCells(getRows(Sheet, 2:4), 2:3), encoding="UTF-8"); Tabl
Проделайте это и получите массив считанных ячеек:
>Tabl<- mapply(getCellValue, getCells(getRows(Sheet, 2:4), 2:3), encoding="UTF-8"); Tabl
2.2 2.3 3.2 3.3 4.2 4.3
58.0169 68.4483 58.4255 68.6441 58.0102 68.1678
А добавка строк кода
dim(Tabl) <- c(2,3) # Возвращаем размерность массиву: 2 – количество столбцов, 3 – строк
Tabl<- t(Tabl); Tabl # Транспонируем в первоначальный вид
позволит увидеть в переменной Tablмассив считанных ячеек в исходном формате:
|
|
> dim(Tabl) <- c(2,3)
>Tabl<- t(Tabl); Tabl
[,1] [,2]
[1,] 58.0169 68.4483
[2,] 58.4255 68.6441
[3,] 58.0102 68.1678
Задание B.В файл data.xlsxна "Лист1"в ячейку D5записать число .
Решение. Ячейка D5имеет координаты (5,4) и в представлении Java–объектов не существует, т.к. в файле она пустая во всех смыслах этого слова. Однако, создавать ее методами библиотеки "xlsx"достаточно трудоемко:
createRow(Sheet, i) # Создать i-ую строку на листе Sheet
createCell(getRows(Sheet, i), j) # Создать j-ую ячейку в i-ой строке на листе Sheet
Причем, если строка или ячейка уже существовала с данными, то она будет затерта вновь создаваемой.
Гораздо проще заранее объявить требуемую ячейку на листе как существующую, например, просто раскрасив ее в желтый цвет:
Не забудем сохранить и обязательно закрыть файл data.xlsxперед записью в ячейку D5 числа :
PATH <- "C:\\Users\\User\\Desktop\\data.xlsx" # Путь к файлу
Wbook<- loadWorkbook(PATH) # Скачали книгу в переменную Wbook
Sheet<- Wbook$getSheet("Лист1") # Сохранили "Лист1"в переменную Sheet
Cell<- getCells(getRows(Sheet, 5), 4) # Необходимая ячейка Cell (5,4) листа Sheet
mapply(setCellValue, Cell, pi) # Записатьвячейку Cell числоpi
saveWorkbook(Wbook, PATH) # Сохранить измененную книгу
Не беспокойтесь о том, что функция записи в ячейку вернула NULL:
>mapply(setCellValue, Cell, pi) # Записать в ячейку D5 число 0.777
$`5.4`
NULL
Смело открывайте файл data.xlsxи проверяйте результат записи числа в ячейку D5.
Замечание.Имейте в виду, что после каждого изменения с последующим сохранением Excel-файла требуется заново перезагружать книгув R, т.е. выполнять команду:
Wbook<- loadWorkbook(PATH) # Скачали книгу в переменную Wbook
Следует резюмировать, что при записи объекта (числа, текста) в ячейку листа Sheet,можно ориентироваться на объединенную команду:
Дата добавления: 2021-11-30; просмотров: 72; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!