Я новичок в R. У меня есть код, который читает из файла без заголовков и выбирает первые два элемента из каждой строки. Каждая линия определяет маршрут самолета. Первый элемент описывает название аэропорта, откуда он взлетает, а второй элемент - имя аэропорта, откуда он приземляется.
Структура из одной из тысяч строк из файла:
LFPO;LFSL;00;AT45;210;LFPO;LFSL;189930747;150907;1815;!!!!;HOP25ZZ;HOP;0;HOP25ZZ-LFPO-LFSL-20150907180500;N;0;;;245346;;;150907;1805;0;;X;;;;;;;;;;210;;0;20150907175900;AA45458325;;;;;NEXE;NEXE;;;;;20150907180500;;;;245346;;;;;;;;;;;;;;;;;;;;;;;;;;;;HOP;;;;;;;;;;;0
Мой код состоит в том, что из всех аэропортов он входит в первую десятку на основе общего числа перемещений, которое выполняет аэропорт, и рассчитывается исходя из общего числа посадок и взлетов, которые аэропорт совершил за период времени, указанный в файл.
Код работает, и я пытаюсь улучшить его, используя лучшие библиотеки или функции. До сих пор я менял функцию read.table () на read_delim (), которая значительно улучшила время обработки. Тем не менее, я получаю несколько предупреждений, хотя печатаю желаемые результаты.
Как мне избавиться от предупреждений или как я могу отсортировать предупреждения?
Это код, а здесь ссылка на файл теста https://easyupload.io/4lw4o4:
start_time <- Sys.time()
# Libraries
library(compare)
library(janitor)
library(data.table)
library(readr)[enter image description here][1]
# START
args = commandArgs(trailingOnly=TRUE)
# test if there is at least one argument
if (length(args)==0) {
fileName = "traffic1week.exp2"
} else if (length(args)==1) {
# default output file
fileName = args[1]
}
# Convert file to dataframe
df = read_delim(fileName, delim = ";", col_names =F)
# Read file
names(df) = c("Airport","Airport")
# Retrieve 1st column
origin = df[1]# takeOff Airports
# Retrieve 2nd column
destination = df[2] # Landing Airports
# Number of movements
takeOff_airports = unlist(table(origin))
landing_airports = unlist(table(destination))
# Convert to dataframes
df1 = as.data.frame(takeOff_airports)
names(df1) = c('Airport', 'TakeOffs')
df2 = as.data.frame(landing_airports)
names(df2) = c('Airport', 'Landings')
# Merge both dataframes
df3 = merge(df1, df2, all=T)
# Sum colum[3] values from each dataframe
df3$Total_Movements = df3$TakeOffs+df3$Landings
# Orde by max total movements
df3 = df3[order(-df3$Total_Movements),]
# Reorganize columns
result = df3[, c(1, 4, 2, 3)]
# Print results
print(result[1:10,], row.names = FALSE)
# STOP
end_time = Sys.time()
cat(paste("Processing time: ", end_time - start_time),sep="\n\n")
Это предупреждения:
Attaching package: ‘compare’
The following object is masked from ‘package:base’:
isTRUE
Attaching package: ‘janitor’
The following objects are masked from ‘package:stats’:
chisq.test, fisher.test
Parsed with column specification:
cols(
.default = col_logical(),
X1 = col_character(),
X2 = col_character(),
X3 = col_character(),
X4 = col_character(),
X5 = col_character(),
X6 = col_character(),
X7 = col_character(),
X8 = col_double(),
X9 = col_double(),
X10 = col_character(),
X11 = col_character(),
X12 = col_character(),
X13 = col_character(),
X14 = col_double(),
X15 = col_character(),
X16 = col_character(),
X17 = col_double(),
X20 = col_double(),
X23 = col_double(),
X24 = col_character()
# ... with 13 more columns
)
See spec(...) for full column specifications.
Warning message:
The `names` must have length 95, not 2.
This warning is displayed once per session.
Airport Total_Movements TakeOffs Landings
LFPG 9407 4926 4481
EHAM 9399 4879 4520
LTBA 9384 4749 4635
EGLL 9057 4749 4308
EDDF 8930 4624 4306
EDDM 7535 3816 3719
LEMD 7412 3789 3623
LIRF 6957 3528 3429
LEBL 6406 3221 3185
EGKK 5995 3050 2945
Processing time: 1.78606390953064
Я хотел бы получить только:
Airport Total_Movements TakeOffs Landings
LFPG 9407 4926 4481
EHAM 9399 4879 4520
LTBA 9384 4749 4635
EGLL 9057 4749 4308
EDDF 8930 4624 4306
EDDM 7535 3816 3719
LEMD 7412 3789 3623
LIRF 6957 3528 3429
LEBL 6406 3221 3185
EGKK 5995 3050 2945
Processing time: 1.78606390953064