-
Notifications
You must be signed in to change notification settings - Fork 0
/
2 - dataprep - bacteria.R
121 lines (85 loc) · 3.43 KB
/
2 - dataprep - bacteria.R
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# Set up environment -----------------------------------------------------------
## Libraries
"openxlsx" %>=>% libInstall %!=>% library(.., char = T)
"reshape2" %>=>% libInstall %!=>% library(.., char = T)
# Import data ------------------------------------------------------------------
## Load excel files
datafile <- paste0(getwd(), "/Data/data.xlsx")
"fWT" %=>% read.xlsx(datafile, .., na.strings = "#N/A") %->% fieldWt
"fMut" %=>% read.xlsx(datafile, .., na.strings = "#N/A") %->% fieldMut
## Experiment start date
experimentStart <- c(
`2015` = as.Date("2015-8-26"),
`2016` = as.Date("2016-3-15"),
`2017` = as.Date("2017-4-3")
)
# First appearance -------------------------------------------------------------
## Determine state change
firstInfection <- function(data) {
data %=>% names %!=>% as.numeric %=>% is.na %=>% `!` %=>% data[..] %!=>%
apply(.., 1, function(x) names(..)[min(which(x > 0))] %=>% as.numeric)
}
## State change for each type of input
fieldWt$firstWt <- firstInfection(fieldWt)
fieldMut$firstMut <- firstInfection(fieldMut)
# Accumulation data for genotypes ----------------------------------------------
## Function
transformAccu <- function(.data) {
.data %=>% names %!=>% as.numeric %=>% is.na %=>% `!` %->% colTypes
.data %=>% nrow %=>% seq_len %=>%
lapply(.., z ->> {
Reduce(
.(x, y) ->> ifelse(1 %in% x, 1, y),
.data[z, colTypes],
accumulate = TRUE
) %=>% t
}) %=>%
do.call(rbind.data.frame, ..) %=>%
setNames(.., names(.data)[colTypes]) %=>%
data.frame(.data[!colTypes], .., check.names = F)
}
## Implementation
fieldWtAccu <- transformAccu(fieldWt)
fieldMutAccu <- transformAccu(fieldMut)
# Melt the weeks ---------------------------------------------------------------
## Function
meltWeeks <- function(data, val) {
melt(
data,
id = names(data)[names(data) %!=>% as.numeric %=>% is.na],
var = "week",
value.name = val
)
}
## Implementation
fieldWtMelt <- meltWeeks(fieldWtAccu, "wt")
fieldMutMelt <- meltWeeks(fieldMutAccu, "mut")
# Merge all predictors ---------------------------------------------------------
fieldMerge <- merge(fieldWtMelt, fieldMutMelt, all = T)
# Modify data type and add some columns ----------------------------------------
fieldMerge %<=>%
mutate(..,
year = as.factor(year),
rep = as.factor(rep),
week = as.numeric(as.character(week)),
date = as.Date(experimentStart[year]) + week * 7,
firstBac = pmin(firstWt, firstMut, na.rm = T),
dir = ifelse(dis == 0, 0, ifelse(dir == "up", 1, -1))
)
# Melt genetype ----------------------------------------------------------------
fieldBacteria <- melt(fieldMerge,
id = names(fieldMerge)[!names(fieldMerge) %in% c("wt", "mut")],
var = "gene",
value.name = "presence"
)
# Cleaning up ------------------------------------------------------------------
## Save dataframes as R object
c("fieldBacteria") %=>%
save(list = .., file = paste0(getwd(), "/Data/bacteria.rda"))
## Remove old dataframes
rm(
"fieldWt", "fieldMut", "fieldWtAccu", "fieldMutAccu",
"fieldWtMelt", "fieldMutMelt", "fieldMerge"
)
## Load saved .rda
"/Data/bacteria.rda" %=>% paste0(getwd(), ..) %=>% load(.., envir = globalenv())