Program3

Author

Tejaswini Reddy

Implement an R function to generate a line graph depicting the trend of a time-series dataset, with separate lines for each group, utilizing gglopt2’s group aesthetic.

Introduction

Step 1: Install the libraries

This document demonstrates how to create a time-series line

library(ggplot2)
library(dplyr)

Attaching package: 'dplyr'
The following objects are masked from 'package:stats':

    filter, lag
The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union
library(tidyr)

Step 2: Load the built-in AirPassengers

#Convert time-series data to dataframe
data
function (..., list = character(), package = NULL, lib.loc = NULL, 
    verbose = getOption("verbose"), envir = .GlobalEnv, overwrite = TRUE) 
{
    fileExt <- function(x) {
        db <- grepl("\\.[^.]+\\.(gz|bz2|xz)$", x)
        ans <- sub(".*\\.", "", x)
        ans[db] <- sub(".*\\.([^.]+\\.)(gz|bz2|xz)$", "\\1\\2", 
            x[db])
        ans
    }
    my_read_table <- function(...) {
        lcc <- Sys.getlocale("LC_COLLATE")
        on.exit(Sys.setlocale("LC_COLLATE", lcc))
        Sys.setlocale("LC_COLLATE", "C")
        read.table(...)
    }
    stopifnot(is.character(list))
    names <- c(as.character(substitute(list(...))[-1L]), list)
    if (!is.null(package)) {
        if (!is.character(package)) 
            stop("'package' must be a character vector or NULL")
    }
    paths <- find.package(package, lib.loc, verbose = verbose)
    if (is.null(lib.loc)) 
        paths <- c(path.package(package, TRUE), if (!length(package)) getwd(), 
            paths)
    paths <- unique(normalizePath(paths[file.exists(paths)]))
    paths <- paths[dir.exists(file.path(paths, "data"))]
    dataExts <- tools:::.make_file_exts("data")
    if (length(names) == 0L) {
        db <- matrix(character(), nrow = 0L, ncol = 4L)
        for (path in paths) {
            entries <- NULL
            packageName <- if (file_test("-f", file.path(path, 
                "DESCRIPTION"))) 
                basename(path)
            else "."
            if (file_test("-f", INDEX <- file.path(path, "Meta", 
                "data.rds"))) {
                entries <- readRDS(INDEX)
            }
            else {
                dataDir <- file.path(path, "data")
                entries <- tools::list_files_with_type(dataDir, 
                  "data")
                if (length(entries)) {
                  entries <- unique(tools::file_path_sans_ext(basename(entries)))
                  entries <- cbind(entries, "")
                }
            }
            if (NROW(entries)) {
                if (is.matrix(entries) && ncol(entries) == 2L) 
                  db <- rbind(db, cbind(packageName, dirname(path), 
                    entries))
                else warning(gettextf("data index for package %s is invalid and will be ignored", 
                  sQuote(packageName)), domain = NA, call. = FALSE)
            }
        }
        colnames(db) <- c("Package", "LibPath", "Item", "Title")
        footer <- if (missing(package)) 
            paste0("Use ", sQuote(paste("data(package =", ".packages(all.available = TRUE))")), 
                "\n", "to list the data sets in all *available* packages.")
        else NULL
        y <- list(title = "Data sets", header = NULL, results = db, 
            footer = footer)
        class(y) <- "packageIQR"
        return(y)
    }
    paths <- file.path(paths, "data")
    for (name in names) {
        found <- FALSE
        for (p in paths) {
            tmp_env <- if (overwrite) 
                envir
            else new.env()
            if (file_test("-f", file.path(p, "Rdata.rds"))) {
                rds <- readRDS(file.path(p, "Rdata.rds"))
                if (name %in% names(rds)) {
                  found <- TRUE
                  if (verbose) 
                    message(sprintf("name=%s:\t found in Rdata.rds", 
                      name), domain = NA)
                  thispkg <- sub(".*/([^/]*)/data$", "\\1", p)
                  thispkg <- sub("_.*$", "", thispkg)
                  thispkg <- paste0("package:", thispkg)
                  objs <- rds[[name]]
                  lazyLoad(file.path(p, "Rdata"), envir = tmp_env, 
                    filter = function(x) x %in% objs)
                  break
                }
                else if (verbose) 
                  message(sprintf("name=%s:\t NOT found in names() of Rdata.rds, i.e.,\n\t%s\n", 
                    name, paste(names(rds), collapse = ",")), 
                    domain = NA)
            }
            files <- list.files(p, full.names = TRUE)
            files <- files[grep(name, files, fixed = TRUE)]
            if (length(files) > 1L) {
                o <- match(fileExt(files), dataExts, nomatch = 100L)
                paths0 <- dirname(files)
                paths0 <- factor(paths0, levels = unique(paths0))
                files <- files[order(paths0, o)]
            }
            if (length(files)) {
                for (file in files) {
                  if (verbose) 
                    message("name=", name, ":\t file= ...", .Platform$file.sep, 
                      basename(file), "::\t", appendLF = FALSE, 
                      domain = NA)
                  ext <- fileExt(file)
                  if (basename(file) != paste0(name, ".", ext)) 
                    found <- FALSE
                  else {
                    found <- TRUE
                    switch(ext, R = , r = {
                      library("utils")
                      sys.source(file, chdir = TRUE, envir = tmp_env)
                    }, RData = , rdata = , rda = load(file, envir = tmp_env), 
                      TXT = , txt = , tab = , tab.gz = , tab.bz2 = , 
                      tab.xz = , txt.gz = , txt.bz2 = , txt.xz = assign(name, 
                        my_read_table(file, header = TRUE, as.is = FALSE), 
                        envir = tmp_env), CSV = , csv = , csv.gz = , 
                      csv.bz2 = , csv.xz = assign(name, my_read_table(file, 
                        header = TRUE, sep = ";", as.is = FALSE), 
                        envir = tmp_env), found <- FALSE)
                  }
                  if (found) 
                    break
                }
                if (verbose) 
                  message(if (!found) 
                    "*NOT* ", "found", domain = NA)
            }
            if (found) 
                break
        }
        if (!found) {
            warning(gettextf("data set %s not found", sQuote(name)), 
                domain = NA)
        }
        else if (!overwrite) {
            for (o in ls(envir = tmp_env, all.names = TRUE)) {
                if (exists(o, envir = envir, inherits = FALSE)) 
                  warning(gettextf("an object named %s already exists and will not be overwritten", 
                    sQuote(o)))
                else assign(o, get(o, envir = tmp_env, inherits = FALSE), 
                  envir = envir)
            }
            rm(tmp_env)
        }
    }
    invisible(names)
}
<bytecode: 0x000001883bd0d770>
<environment: namespace:utils>
class(AirPassengers)
[1] "ts"
as.numeric(AirPassengers)
  [1] 112 118 132 129 121 135 148 148 136 119 104 118 115 126 141 135 125 149
 [19] 170 170 158 133 114 140 145 150 178 163 172 178 199 199 184 162 146 166
 [37] 171 180 193 181 183 218 230 242 209 191 172 194 196 196 236 235 229 243
 [55] 264 272 237 211 180 201 204 188 235 227 234 264 302 293 259 229 203 229
 [73] 242 233 267 269 270 315 364 347 312 274 237 278 284 277 317 313 318 374
 [91] 413 405 355 306 271 306 315 301 356 348 355 422 465 467 404 347 305 336
[109] 340 318 362 348 363 435 491 505 404 359 310 337 360 342 406 396 420 472
[127] 548 559 463 407 362 405 417 391 419 461 472 535 622 606 508 461 390 432
as.numeric(time(AirPassengers))
  [1] 1949.000 1949.083 1949.167 1949.250 1949.333 1949.417 1949.500 1949.583
  [9] 1949.667 1949.750 1949.833 1949.917 1950.000 1950.083 1950.167 1950.250
 [17] 1950.333 1950.417 1950.500 1950.583 1950.667 1950.750 1950.833 1950.917
 [25] 1951.000 1951.083 1951.167 1951.250 1951.333 1951.417 1951.500 1951.583
 [33] 1951.667 1951.750 1951.833 1951.917 1952.000 1952.083 1952.167 1952.250
 [41] 1952.333 1952.417 1952.500 1952.583 1952.667 1952.750 1952.833 1952.917
 [49] 1953.000 1953.083 1953.167 1953.250 1953.333 1953.417 1953.500 1953.583
 [57] 1953.667 1953.750 1953.833 1953.917 1954.000 1954.083 1954.167 1954.250
 [65] 1954.333 1954.417 1954.500 1954.583 1954.667 1954.750 1954.833 1954.917
 [73] 1955.000 1955.083 1955.167 1955.250 1955.333 1955.417 1955.500 1955.583
 [81] 1955.667 1955.750 1955.833 1955.917 1956.000 1956.083 1956.167 1956.250
 [89] 1956.333 1956.417 1956.500 1956.583 1956.667 1956.750 1956.833 1956.917
 [97] 1957.000 1957.083 1957.167 1957.250 1957.333 1957.417 1957.500 1957.583
[105] 1957.667 1957.750 1957.833 1957.917 1958.000 1958.083 1958.167 1958.250
[113] 1958.333 1958.417 1958.500 1958.583 1958.667 1958.750 1958.833 1958.917
[121] 1959.000 1959.083 1959.167 1959.250 1959.333 1959.417 1959.500 1959.583
[129] 1959.667 1959.750 1959.833 1959.917 1960.000 1960.083 1960.167 1960.250
[137] 1960.333 1960.417 1960.500 1960.583 1960.667 1960.750 1960.833 1960.917