我正在写我的论文,我正在努力准备一些数据。
我有一个包含prices、distance和许多美国航空公司航线的其他变量的数据集。我需要识别特定航空公司(西南)在每条航线上进入的威胁,为此,我需要为数据集的每一行创建一个假设值为1的假人,如果西南航空公司当时正从该航线的起飞机场起飞。
我是如何处理这个问题的:有一个算法来检查year和起飞airport_ID (数据集中的所有变量),然后根据这个值过滤所有数据集,依次是year =<年份行、origin_airport= origin_airport行、carrier =西南。如果过滤器产生一个输出,那就意味着西南航空已经从那个机场起飞了。因此,如果筛选产生一个输出,则虚拟值应该假定为1,否则为0。对于数据集中的每一行,这都应该是自动化的。
你知道如何把这些写进Rstudio代码吗?还是有更简单的方法来解决这个问题?
这是到dropbox上的数据集的链接:
https://www.dropbox.com/s/n09rp2vcyqfx02r/DB1B_completeDB1B_complete.csv?dl=0
发布于 2022-05-31 01:15:15
简单的回答是使用一个自连接。
查看您的数据集,我没有看到IATA机场代码,而是6位数字的原点和目的地id(它们似乎不符合DB1A/DB1B??中的任何内容)。而且,(对我来说)不清楚数据的粒度到底是什么,所以做一些假设。
library(data.table)
setwd('<directory with your csv file>')
data <- fread('DB1B_completeDB1B_complete.csv')
wn <- data[carrier=='WN']
data[, flag:=0]
data[wn, flag:=1, on=.(ap_id, year, quarter, date)]因此,这只需提取WN记录,然后将其连接回ap_id (定义路由?)、year、quarter和date上的原始表。这假设粒度位于载波/路由/年度/季度/日期级别(例如,每一行)。
不过,在这样做之前,您需要进行一些严肃的数据清理。例如,虽然ORIGIN_AIRPORT_CD和DEST_AIRPORT_CD看起来是从ap_id中解析出来的,但是大约有1200个记录是NA的。
##
# missingness
#
data[, .(col = names(data), na.count=sapply(.SD, \(x) sum(is.na(x))))]另外,我的假设是,每艘船/航线/年度/季度/日期有一行,但似乎并不总是如此。这是WN行的一个特别严重的问题。
##
# duplicates??
#
data[, .N, keyby=.(carrier, ap_id, year, quarter, date)][order(-N)]
wn[, .N, keyby=.(carrier, ap_id, year, quarter, date)][order(-N)]最后,在试图量化WN进入市场的影响时,您可能至少应该考虑将附近的机场分组。例如,JFK/LGA/EWR经常被认为是"NYC",SFO/OAK/SJC经常被认为是“湾区”(这些只是例子)。例如,这意味着,如果WN开始从LGA飞往感兴趣的目的地,也可能会影响从JFK和EWR到同一目的地的OA价格。
https://stackoverflow.com/questions/72412057
复制相似问题