[8e0848]: / common_scripts / statistics / useful_functions.R

Download this file

55 lines (46 with data), 1.6 kB

 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
aggregate_by_mean <- function(data, xs) {
if(dim(data)[2]!=length(xs))stop("length between data and variable 'xs' do not match!")
library(reshape)
library(data.table)
# Convert to data.table.
dat <- data.table(t(data))
# Append the vector of group names as an extra column.
dat$agg_var <- as.character(xs)
# Melt the data.table so all values are in one column called "value".
dat <- melt(dat, id.vars = "agg_var")
# Cast the data.table back into the original shape, and take the mean.
dat <- dcast.data.table(
dat, agg_var ~ variable, value.var = "value",
fun.aggregate = mean, na.rm = TRUE
)
namecol=dat$agg_var
# Delete the extra column.
dat[ , agg_var := NULL]
dat=t(dat)
rownames(dat) <- rownames(data)
colnames(dat)=namecol
return(dat)
}
aggregate_by_median <- function(data, xs) {
if(dim(data)[2]!=length(xs))stop("length between data and variable 'xs' do not match!")
library(reshape)
library(data.table)
# Convert to data.table.
dat <- data.table(t(data))
# Append the vector of group names as an extra column.
dat$agg_var <- as.character(xs)
# Melt the data.table so all values are in one column called "value".
dat <- melt(dat, id.vars = "agg_var")
# Cast the data.table back into the original shape, and take the mean.
dat <- dcast.data.table(
dat, agg_var ~ variable, value.var = "value",
fun.aggregate = median, na.rm = TRUE
)
namecol=dat$agg_var
# Delete the extra column.
dat[ , agg_var := NULL]
dat=t(dat)
rownames(dat) <- rownames(data)
colnames(dat)=namecol
return(dat)
}