НачатьНачать бесплатно

Разделить — применить — объединить

Типичная задача в анализе данных — разбить фрейм данных на группы, применить преобразование к каждой группе, а затем снова объединить части в один фрейм. Этот подход настолько распространён в R, что получил собственное название: split-apply-combine («разделить — применить — объединить»). В курсе Intermediate R for Finance вы подробнее познакомитесь с такими задачами и полезными функциями для их решения. А пока разберём простой пример.

Предположим, что для фрейма данных cash вам нужно удвоить значение cash_flow для компании A и утроить — для компании B:

grouping <- cash$company
split_cash <- split(cash, grouping)

# Обратиться к столбцу cash_flow каждого элемента списка можно так:
split_cash$A$cash_flow
[1] 1000 4000  550

split_cash$A$cash_flow <- split_cash$A$cash_flow * 2
split_cash$B$cash_flow <- split_cash$B$cash_flow * 3

new_cash <- unsplit(split_cash, grouping)

Обратите внимание на обращение к столбцу cash_flow. Первый знак $ позволяет получить элемент A из списка split_cash. Второй знак $ — обратиться к столбцу cash_flow фрейма данных, хранящегося в элементе A.

Это упражнение является частью курса

Введение в R для финансов

Посмотреть курс

Инструкции к упражнению

  • Фрейм данных split_cash уже доступен в среде. Также доступна переменная grouping, использовавшаяся для разбиения cash.
  • Выведите split_cash, чтобы изучить структуру списка.
  • Выведите столбец cash_flow для компании B из split_cash.
  • Предположим, что компания A прекратила деятельность. Установите значение cash_flow для компании A равным 0.
  • С помощью grouping примените функцию unsplit() к фрейму данных split_cash. Сохраните результат в переменную cash_no_A.
  • Выведите cash_no_A, чтобы проверить изменённый фрейм данных.

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

# Print split_cash


# Print the cash_flow column of B in split_cash
split_cash$___$___

# Set the cash_flow column of company A in split_cash to 0
split_cash$___$___ <- ___

# Use the grouping to unsplit split_cash
cash_no_A <- unsplit(___, ___)

# Print cash_no_A
Редактировать и запускать код