根据数据框创建矩阵

时间:2018-11-19 15:44:15

标签: r dataframe matrix

我一般对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 :(得分:3)

您正在寻找ngOnDestroy,即

xtabs

给出,

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

PS

正如@Andre Elrico所提到的,由于某种原因,您将 airport.departure airport.arrival CDG QNY QXO CDG 0 3 0 QNY 0 0 1 QXO 0 5 0 SYD 11 0 0 变量声明为字符串。您需要先转换为整数,然后再计算总和

建议的解决方案:

amount

答案 1 :(得分:0)

使用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说您想查看根据这些变量分组的统计信息
  • summaryize计算您要查找的统计信息,在这种情况下,每个“组”的总数。之所以包含as.numeric(as.character()),是因为'amount'是作为一个因子类型开始的,不能将其相加[{as.character()是必需的,因为as.numeric如果直接调用该因子会产生意外行为]。 total =给出要包含在输出表中的任意列名称;您可以省去它,但仍然可以使用。
  • %>%用于将一个命令的输出作为输入传递给dplyr中的下一个命令

输出:

output table

(输出表的格式与您所描述的不同,但是它包含了您要查找的所有信息。并且dplyr是一个不错的软件包,可以开始学习这种数据操作!)