transform.extracted: Transform data for database migration

Description Usage Arguments Value Examples

View source: R/transform.R

Description

Transform data of class extracted for migrating to a database

Usage

1
2
## S3 method for class 'extracted'
transform(extracted_data, trans_functions, new_columns)

Arguments

extracted_data

A tidy data set with class extracted

trans_functions

A list of functions that will be applied to the extracted_data object. The one parameter of the function must be the extracted_data object. The function must return a tidy data set that will be passed sequentially from one transformation function to the next.

new_columns

Character vector of the column to be returned as a transformed data output

Value

A data.frame.

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
df <- data.frame(
a = rep(1:4, each = 4),
b = rep(c(0L, 1L, 2L, 3L), 4),
c = rep(letters[1:8], 2),
d = rep(1:2, each = 8),
e = as.character(seq(as.Date("2015/1/1"), as.Date("2015/1/16"), "days")),
stringsAsFactors = FALSE
)

makeVisit <- function(data){
  old.visit <- c("a", "b", "c", "d", "e", "f", "g")
  new.visit <- paste0("V0", 1:7)
  data$Visit <- apply(data, 1, function(row){
     if(row["c"] %in% old.visit){
       new.visit[grep(row["c"], old.visit, fixed = TRUE)]
     }else{
       row["c"]
     }
   })
   data
 }

makeSubject <- function(data){
  data$Subject <- paste0("PPMI-", data$d)
  data
}

makeCase <- function(data){
  data$Case <- paste(data$Subject, data$Visit, sep = "-")
   data
}

makeTest <- function(data){
   data <- gather(data, Test, Value, a:b)
   i <- sapply(data, is.factor)
   data[i] <- lapply(data[i], as.character)
   data
 }

output <- transform(extracted_data = extracted(df),
                    trans_functions = list(makeVisit, makeSubject, makeCase, makeTest),
                    new_columns = c("Subject", "Visit", "Case", "Test", "Value"))

NateByers/transformR documentation built on May 7, 2019, 6:06 p.m.