Создать матрицу из фрейма данных - PullRequest
0 голосов
/ 19 ноября 2018

Я очень плохо знаком с R и написанием сценариев в целом. Пожалуйста, будьте терпеливы, если это очень простой вопрос. Мой поиск решения не увенчался успехом.

date.depature <- c("2016.06.16", "2016.11.16", "2017.01.05", "2017.01.12", "2017.02.25")
airport.departure <- c("CDG", "QNY", "QXO", "CDG", "QNY")
airport.arrival <- c("SYD", "CDG", "QNY", "SYD", "QXO")
amount <- c("1", "3", "1", "10", "5")
df <- data.frame(date.depature, airport.departure, airport.arrival, amount)

Я хочу изменить df на матрицу, в которой в качестве строк указан airport.departure, а airport.arrival - столбцы с накопленной суммой за данный месяц / годы в ячейках матрицы.

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

с использованием пакета dplyr:

library(dplyr)
df %>% mutate(month.departure =substr(date.depature, 1, 7)) %>%
  group_by(airport.departure, airport.arrival, month.departure) %>%
  summarize(total = sum(as.numeric(as.character(amount))))
  • mutate добавляет столбец, в котором указывается месяц / год (без даты, поскольку вы просили сгруппировать по месяцам)
  • group_by говорит, что вы хотите видеть статистику, сгруппированную по этим переменным
  • суммирует, вычисляет статистику, которую вы ищете, в данном случае общая сумма на «группу». as.numeric(as.character()) включено, потому что «сумма» начиналась как тип фактора, который нельзя суммировать [необходимо as.character(), потому что as.numeric будет иметь неожиданное поведение при вызове непосредственно для фактора]. total = дает произвольное имя столбца для включения в выходную таблицу; Вы можете оставить это, и это все еще будет работать.
  • %>% используется для передачи выходных данных одной команды в качестве входных данных для следующей команды в dplyr

Выход:

output table

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

0 голосов
/ 19 ноября 2018

Вы ищете xtabs, то есть

xtabs(amount ~ airport.arrival + airport.departure, df)

, который дает,

              airport.departure
airport.arrival CDG QNY QXO
            CDG   0   3   0
            QNY   0   0   1
            QXO   0   5   0
            SYD  11   0   0

PS

Как упоминает @Andre Elrico, по какой-то причине вы объявили переменную amount в виде строки.Вам нужно преобразовать в целое число, прежде чем вычислять суммы

Предлагаемое решение:

xtabs(as.integer(amount) ~ airport.arrival + airport.departure, df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...