Задания для самостоятельной работы



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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!