Почему бы вам не принудить amount
к классу "integer"
при создании df
?Просто избавьтесь от двойных кавычек в
amount <- c("1", "3", "1", "10", "5")
или
amount <- as.integer(c("1", "3", "1", "10", "5"))
Это потому, что as.integer(df$amount)
не возвращает
c(1, 3, 1, 10, 5)
Когда вы создаете фрейм данных df
, этот вектор приводится к классу "factor"
, и теперь у вас есть
as.integer(df$amount)
#[1] 1 3 1 2 4
Правильный путь будет
as.integer(as.character(df$amount))
#[1] 1 3 1 10 5
Или проще:
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)
date.depature <- as_date(date.depature)
df <- data.frame(date.depature, airport.departure, airport.arrival, amount)
Теперь вопрос.
Это, в основном, проблема поднабора.
Подмножество данных, извлекающих нужные вам годы и месяцы, затем запускается так жеxtabs
command.
df1 <- df[year(df$date.depature) == 2017, ]
df2 <- df1[month(df1$date.depature) == 1, ]
df3 <- cbind(df[year(df$date.depature) < 2017, ], df2)
Теперь xtabs
, с подкадрами выше.
xtabs(amount ~ airport.arrival + airport.departure, df1)
xtabs(amount ~ airport.arrival + airport.departure, df2)
xtabs(amount ~ airport.arrival + airport.departure, df3)