-
Notifications
You must be signed in to change notification settings - Fork 52
Expand file tree
/
Copy pathshowcase.R
More file actions
148 lines (117 loc) · 3.66 KB
/
Copy pathshowcase.R
File metadata and controls
148 lines (117 loc) · 3.66 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
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
library(data.table)
# create a data.table
fruit = data.frame(x=rep(c("apple","banana","orange"),each=2), y=c(1,3,6), z=1:6)
setDT(fruit)
class(fruit)
as.data.table(fruit)
# copy data.table can prevent changing raw data
fruit_cp <- data.table::copy(fruit)
# set names can make it meaningful
setnames(fruit_cp, c("x","y","z"),
c("name", "number", "money"))
fruit_cp
setcolorder(fruit_cp, c("name", "money","number"))
fruit_cp
# extract infromation what we need
fruit_cp[name == "banana", ]
fruit_cp[name == "banana"]
fruit[fruit$x == "banana",]
# select information from data.table
fruit_cp[money > 3, ]
fruit_cp[name %like% "e",]
fruit_cp[number %between% c(3,7)]
fruit_cp[money %between% c(3,7) & number %between% c(3,7)]
# %between% use to get range 3 to 7
# select 2nd colum
fruit_cp[,2]
# delete 2nd colum
fruit_cp[, -2]
fruit_cp[, c("name", "money")]
fruit_cp[, c(name, money)]
x <- c("name", "money")
fruit_cp[, x, with = FALSE]
# calculate content
fruit_cp[, .(x = sum(number))]
# add new columns
fruit_cp[name == "apple", c := 1+2]
fruit_cp
fruit_cp[name == "apple", c := 3+4]
fruit_cp
fruit_cp[, c := ifelse(money <4, "cheap", "expensive")]
fruit_cp
# two methods to add over 1 columns
fruit_cp[, `:=` (C = 1, D = 2)]
fruit_cp
fruit_cp[, c("e", "f") := list(1, rnorm(6))]
fruit_cp
# delete C column
fruit_cp[, C := NULL]
fruit_cp
fruit_cp[, f := as.integer(f)]
fruit_cp
fruit_cp[, name, by = .(number)]
fruit_cp[, f := sum(money), by = number]
fruit_cp
fruit_cp[, .SD[1], by = number]
fruit_cp[, .SD[.N], by = number]
# order columns
setorder(fruit_cp, number, -money)
fruit_cp
setorder(fruit_cp, -money, number)
fruit_cp
# select unique information
uniqueN(fruit_cp, by = c("name"))
unique(fruit_cp, by = c("name"))
base::unique(fruit_cp, by = c("name"))
unique.default(fruit_cp, by = c("name"))
# setkeys can easy to select content
setkey(fruit_cp, name)
haskey(fruit_cp)
key(fruit_cp)
setkey(fruit_cp, NULL)
haskey(fruit_cp)
fruit_cp["banana", ]
setkey(fruit_cp, number)
fruit_cp[1,]
fruit_cp[.(1)]
setkey(fruit_cp, name, number)
fruit_cp[.("banana", 1),]
fruit_cp["apple", sum(number)]
fruit_cp[, sum(number), by = name]
# how to bind data.table
dt_a <- data.table(a = 1:3,
b = c("c","a","b")
)
dt_a
dt_b <- data.table(x = rev(1:3),
y = c("b","c","b"))
dt_b
dt_a[dt_b, on = .(b = y)]
rbind(dt_a, dt_b, use.names = FALSE)
cbind(dt_a, dt_b)
# read data and export data
fwrite(fruit_cp, "fruit_out.tsv", sep = "\t")
fread("fruit_out.tsv", select = c("name", "number"))
x = data.table(chr=c("Chr1", "Chr1", "Chr2", "Chr2", "Chr2"),
start=c(5,10, 1, 25, 50), end=c(11,20,4,52,60))
y = data.table(chr=c("Chr1", "Chr1", "Chr2"), start=c(1, 15,1),
end=c(4, 18, 55), geneid=letters[1:3])
x
y
# find region which overlap between two data.table
setkey(y, chr, start, end)
foverlaps(x, y ,type = "any")
foverlaps(x, y ,type = "any", which = TRUE)
foverlaps(x, y ,type = "any", nomatch = NULL)
# reshape data.table
reshape_dt <- data.table(kinds = c(rep("peach", 2), rep("grape", each = 2)),
price = c("3","8","4","6"),
price2 = c("4","9","5","7"),
level = c("h","l","h","l"))
reshape_dt
reshape_dt_new <- melt(reshape_dt, id.vars = c("kinds", "level"),
measure.vars = c("price", "price2"),
variable.name = "2price",
value.name = "money")
reshape_dt_new
dcast(reshape_dt_new, kinds + level ~ `2price`, value.var = "money")