数据结构基本点

2、向量 - 图1

逻辑性数据

比较运算的结果是逻辑值
>,<,<=,>=,==(相等吗?),!=(不相等吗?)

image.png

逻辑运算
与&、或|、非!
image.png

数据类型的判断和转换

image.png
image.png

数据类型转换优先顺序

字符>数值>逻辑

image.png

实操

2.1向量生成

(1)用 c() 结合到一起【类似陈列】
(2)连续的数字用冒号“:”
(3)有重复的用rep(),有规律的序列用seq(),随机数用rnorm
(4)通过组合,产生更为复杂的向量
image.png
练习
image.png
image.png
如果数据值填错时,可能出现以下情况:
前面<具体数值时,会出现自动补齐;
前面>具体数值时,会出现重复等
image.png

2.2 单个向量

(1)赋值给一个变量名
image.png
image.png
(2)简单数学计算
image.png
(3)根据某条件进行判断,生成逻辑型向量
image.png
(4)初级统计
max(x) #最大值
min(x) #最小值
mean(x) #均值
median(x) #中位数
var(x) #方差
sd(x) #标准差
sum(x) #总和
image.png
‼️重要函数
length(x) #长度
unique(x) #去重复
duplicated(x) #对应元素是否重复
table(x) #重复值统计
sort(x)
sort(x,decreasing = F)
sort(x,decreasing = T)
image.png

2.3.两个向量

(1)比较运算,生成等长的逻辑向量
(2)数学计算
(3)连接
image.png
当两个向量长度不一致
image.png
解答:
x和y不等长时:发生循环补齐【短循环补齐长的】
image.png
可利用循环补齐简化代码
image.png
(4)交集、并集、差集
intersect(x,y)
union(x,y)
setdiff(x,y)
setdiff(y,x)
image.png

2.4.向量筛选(取子集): []

image.png
根据
image.png
image.png

image.png
思考题:
image.png
image.png

2.5.修改向量中的某个/某些元素:取子集+赋值

image.png

2.6 简单向量作图

image.png

涉及代码部分

  1. 基本学习操作
  2. > #陈列数字或字符用c()
  3. > c(1,3,5)
  4. [1] 1 3 5
  5. > c("a","b","A")
  6. [1] "a" "b" "A"
  7. > #连续数字用:
  8. > 1:9
  9. [1] 1 2 3 4 5 6 7 8 9
  10. > #重复用rep()
  11. > rep("x",times=6)
  12. [1] "x" "x" "x" "x" "x" "x"
  13. > #有规律的数列用seq()
  14. > seq(from=3,to=11,by=2)
  15. [1] 3 5 7 9 11
  16. > #随机数用rnorm
  17. > rnorm(n=2)
  18. [1] -0.4587199 0.1827148
  19. > #组合用paste0
  20. > paste0(rep("x",times=3),1:2)
  21. [1] "x1" "x2" "x1"
  22. > paste0(rep("student",times=3),seq(from=2,to=10,by=2))
  23. [1] "student2" "student4"
  24. [3] "student6" "student8"
  25. [5] "student10"
  26. ②
  27. > paste0(rep("student"),seq(2,10,2))
  28. [1] "student2" "student4"
  29. [3] "student6" "student8"
  30. [5] "student10"
  31. ③
  32. > a = seq(from=2,to=14,by=2)
  33. > paste0(rep("student",length(a)),a)
  34. [1] "student2" "student4" "student6"
  35. [4] "student8" "student10" "student12"
  36. [7] "student14"
  37. 数据类型转换
  38. > c(2,"a")#数值型自动被转换为字符型数据
  39. [1] "2" "a"
  40. > c(TRUE,"a")#逻辑型自动被转换为字符型数据
  41. [1] "TRUE" "a"
  42. > c(TRUE,FALSE,5)#逻辑型自动被转换为数值型数据
  43. [1] 1 0 5
  44. > #单个向量操作
  45. > #1、赋值,
  46. > #可用名称xyz、AB、_、.
  47. > #不可用空格、“”、c、-、中文
  48. > x <- c(2,4,7) #规范写法
  49. > x = c(2,4,7)#随意写法
  50. > x
  51. [1] 2 4 7
  52. > (x <- c(2,4,7)) #赋值+输出(专用代码)
  53. [1] 2 4 7
  54. > x <- c(2,4,7);x #两行代码并行实现,用分号隔开
  55. [1] 2 4 7
  56. > #2、简单运算
  57. > x <- c(3,4,8)
  58. > x+1
  59. [1] 4 5 9
  60. > log(x)# 取对数
  61. [1] 1.098612 1.386294 2.079442
  62. > sqrt(x)#开根号
  63. [1] 1.732051 2.000000 2.828427
  64. > #3、根据某条件进行判断,产生逻辑向量
  65. > x>4
  66. [1] FALSE FALSE TRUE
  67. > x==4
  68. [1] FALSE TRUE FALSE
  69. > #4、初级统计
  70. > x <- c(1,5,8,1)
  71. > #长度
  72. > length(x)
  73. [1] 4
  74. > #去重复,从左往右,若第一次出现则不重复,其余重复出现则为重复
  75. > unique(x)
  76. [1] 1 5 8
  77. > #判断是否重复,同unique的定义
  78. > duplicated(x)
  79. [1] FALSE FALSE FALSE TRUE
  80. > !duplicated(x)
  81. [1] TRUE TRUE TRUE FALSE
  82. > #重复值统计
  83. > table(x)
  84. x
  85. 1 5 8
  86. 2 1 1
  87. > #排序
  88. > sort(x)#默认从小到大
  89. [1] 1 1 5 8
  90. > sort(x,decreasing = F)
  91. [1] 1 1 5 8
  92. > sort(x,decreasing = T)
  93. [1] 8 5 1 1
  94. > #对两个向量的操作
  95. > #1、比较运算,生成等长的逻辑向量
  96. > x <- c(1,3,6,1)
  97. > y <- c(3,2,1,6)
  98. > x == y
  99. [1] FALSE FALSE FALSE FALSE
  100. > y == x
  101. [1] FALSE FALSE FALSE FALSE
  102. > #2、数学运算
  103. > x+y
  104. [1] 4 5 7 7
  105. > #3、连接
  106. > paste(x,y,seq=",")
  107. [1] "1 3 ," "3 2 ," "6 1 ," "1 6 ,"
  108. > paste0(x,y)
  109. [1] "13" "32" "61" "16"
  110. > paste(x,y,seq="")
  111. [1] "1 3 " "3 2 " "6 1 " "1 6 "
  112. > paste(x,y)
  113. [1] "1 3" "3 2" "6 1" "1 6"
  114. > # 当两个向量不等长时,发生循环补齐,长的说了算
  115. > x <- c(1,3,6,1)
  116. > y <- c(3,2,6)
  117. > x == y
  118. [1] FALSE FALSE TRUE FALSE
  119. Warning message:
  120. In x == y : 长的对象长度不是短的对象长度的整倍数
  121. > y == x
  122. [1] FALSE FALSE TRUE FALSE
  123. Warning message:
  124. In y == x : 长的对象长度不是短的对象长度的整倍数
  125. > #利用循环补齐简化代码
  126. > paste(rep("x",3),1:3)
  127. [1] "x 1" "x 2" "x 3"
  128. > paste0("x",1:3)
  129. [1] "x1" "x2" "x3"
  130. > #4、交集、并集、交集
  131. > x <- c(1,5,8,1)
  132. > y <- c(3,1,8)
  133. > intersect(x,y)
  134. [1] 1 8
  135. > union(x,y)
  136. [1] 1 5 8 3
  137. > setdiff(x,y)
  138. [1] 5
  139. > x %in% y #x的每个元素在y中存在吗
  140. [1] TRUE FALSE TRUE TRUE
  141. > y %in% x #y的每个元素在x中存在吗
  142. [1] FALSE TRUE TRUE
  143. >
  144. > #注意xy的赋值形式
  145. > x <- c(1,1,3,5,7);y <- c(2,4,5,6,7)
  146. > x <- c(1,1,3,5,7)
  147. > y <- c(2,4,5,6,7)
  148. >
  149. > x>10 #可得到与x等长的逻辑向量
  150. [1] FALSE FALSE FALSE FALSE FALSE
  151. > x %in% y #可得到与x等长的逻辑向量
  152. [1] FALSE FALSE FALSE TRUE TRUE
  153. > duplicated(x) #可得到与x等长的逻辑向量
  154. [1] FALSE TRUE FALSE FALSE FALSE
  155. > unique(x) #不能可得到与x等长的逻辑向量
  156. [1] 1 3 5 7
  157. #循环补齐
  158. > x <- c(1,5,7);y <- c(2,4,5,6,7)
  159. > x==y #可发生循环补齐
  160. [1] FALSE FALSE FALSE FALSE FALSE
  161. Warning message:
  162. In x == y : 长的对象长度不是短的对象长度的整倍数
  163. > unique(x) #不发生循环补齐
  164. [1] 1 5 7
  165. > x %in% y #不发生循环补齐
  166. [1] FALSE TRUE TRUE
  167. > paste(x,y) #可发生循环补齐
  168. [1] "1 2" "5 4" "7 5" "1 6" "5 7"
  169. > x+y #可发生循环补齐
  170. [1] 3 9 12 7 12
  171. Warning message:
  172. In x + y : 长的对象长度不是短的对象长度的整倍数
  173. > #向量筛选(取子集)[],即将TRUE对应的值挑选出来
  174. > x <- 8:15
  175. > x==10
  176. [1] FALSE FALSE TRUE FALSE FALSE FALSE FALSE
  177. [8] FALSE
  178. > x[x==10]
  179. [1] 10
  180. > x<12
  181. [1] TRUE TRUE TRUE TRUE FALSE FALSE FALSE
  182. [8] FALSE
  183. > x[x<12]
  184. [1] 8 9 10 11
  185. >
  186. > x %in% c(9,14)
  187. [1] FALSE TRUE FALSE FALSE FALSE FALSE TRUE
  188. [8] FALSE
  189. > x[x%in%c(9,14)]
  190. [1] 9 14
  191. > #[]在没有遇到TRUE或FALSE时,可表示下标/位置(即第几个时对应的值)
  192. > x[2]
  193. [1] 9
  194. > x[2:5]
  195. [1] 9 10 11 12
  196. > x[c(1,5)]
  197. [1] 8 12
  198. > x[-3]# -代表的是反选
  199. [1] 8 9 11 12 13 14 15
  200. > x[-(2:4)]
  201. [1] 8 12 13 14 15
  202. > #简单向量作图
  203. > k1=rnorm(6);k1
  204. [1] -0.4591089 0.1028639 -0.1179319 -0.5134955 0.2737513 1.1585768
  205. > k2=rep(c("a","b"),each=3);k2
  206. [1] "a" "a" "a" "b" "b" "b"
  207. > boxplot(k1~k2)
  208. 作业
  209. > load("gands.Rdata")
  210. > length(g)#计算长度
  211. [1] 100
  212. > length(unique(g))#去重后的个数
  213. [1] 55
  214. > g[g=seq(from=2,to=50,by=2)]#筛选下标为偶数的基因名
  215. [1] "CRAMP1L" "PRSS8" "CRAMP1L" "SLCO1C1"
  216. [5] "COMMD1" "CCT4" "RAB7A" "ZDHHC16"
  217. [9] "MYL12B" "SNRPE" "ZNF586" "GGT7"
  218. [13] "RAB7A" "AFG3L2" "AC104581.1" "MPP2"
  219. [17] "ATP2A2" "SNRPE" "PRSS8" "ZNF461"
  220. [21] "CECR5" "CLEC17A" "ATG10" "ATG10"
  221. [25] "SLC25A25"
  222. 其他方式
  223. g[c(T,F)]
  224. > table(g %in% s)
  225. FALSE TRUE
  226. 37 63
  227. > g[g %in% s] #g中有多少元素在s中存在
  228. [1] "GFM2" "SLCO1C1" "NYNRIN"
  229. [4] "COMMD1" "COMMD1" "AC017081.1"
  230. [7] "RAB7A" "CASKIN2" "GGT7"
  231. [10] "SNRPE" "RGPD3" "ZNF586"
  232. [13] "COMMD1" "GGT7" "URB1"
  233. [16] "RAB7A" "MPP2" "AFG3L2"
  234. [19] "URB1" "AC104581.1" "MPP2"
  235. [22] "SNRPE" "ARHGAP1" "ZNF461"
  236. [25] "OR2D3" "CECR5" "SPDL1"
  237. [28] "CLEC17A" "ZNF461" "ATG10"
  238. [31] "ATG10" "ATG10" "SLC25A25"
  239. [34] "SLC30A9" "SLCO1C1" "GGT7"
  240. [37] "CASKIN2" "GSTP1" "MPP2"
  241. [40] "NYNRIN" "INTS12" "MPP2"
  242. [43] "RGPD3" "RGPD3" "SLC30A9"
  243. [46] "C10orf128" "HBD" "SLC30A9"
  244. [49] "GGT7" "HEPH" "RP5-1021I20.4"
  245. [52] "KLHDC8A" "HBD" "ZNF586"
  246. [55] "CECR5" "OR2D3" "LIPE"
  247. [58] "INTS12" "LIPE" "SPDL1"
  248. [61] "SLCO1C1" "GGT7" "CECR5"
  249. > duplicated(g)#有多少哥基因在g中出现不止一次
  250. [1] FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
  251. [11] TRUE FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE
  252. [21] FALSE FALSE TRUE TRUE FALSE TRUE FALSE FALSE TRUE FALSE
  253. [31] FALSE TRUE FALSE FALSE TRUE TRUE FALSE TRUE FALSE FALSE
  254. [41] FALSE FALSE FALSE FALSE TRUE FALSE TRUE TRUE TRUE FALSE
  255. [51] FALSE FALSE FALSE TRUE FALSE TRUE TRUE FALSE FALSE TRUE
  256. [61] TRUE TRUE FALSE TRUE TRUE FALSE TRUE TRUE TRUE FALSE
  257. [71] FALSE TRUE TRUE TRUE FALSE TRUE FALSE FALSE TRUE FALSE
  258. [81] TRUE FALSE TRUE FALSE TRUE TRUE TRUE FALSE TRUE TRUE
  259. [91] FALSE FALSE TRUE FALSE TRUE TRUE TRUE TRUE TRUE FALSE
  260. > g[duplicated(g)]
  261. [1] "CRAMP1L" "COMMD1" "CCT4" "MYL12B" "COMMD1" "GGT7"
  262. [7] "RAB7A" "URB1" "MPP2" "IL19" "SNRPE" "PRSS8"
  263. [13] "ZNF461" "ATG10" "ATG10" "ZDHHC16" "SLCO1C1" "GGT7"
  264. [19] "CASKIN2" "UBAC1" "MPP2" "NYNRIN" "MYL12B" "MPP2"
  265. [25] "RGPD3" "RGPD3" "SLC30A9" "SLC30A9" "MYL12B" "GGT7"
  266. [31] "TUBA4A" "HBD" "CCT4" "ZNF586" "CECR5" "OR2D3"
  267. [37] "CRAMP1L" "INTS12" "LIPE" "SPDL1" "SLCO1C1" "MARC2"
  268. [43] "GGT7" "LCP1" "CECR5"
  269. > unique(g[duplicated(g)])
  270. [1] "CRAMP1L" "COMMD1" "CCT4" "MYL12B" "GGT7" "RAB7A"
  271. [7] "URB1" "MPP2" "IL19" "SNRPE" "PRSS8" "ZNF461"
  272. [13] "ATG10" "ZDHHC16" "SLCO1C1" "CASKIN2" "UBAC1" "NYNRIN"
  273. [19] "RGPD3" "SLC30A9" "TUBA4A" "HBD" "ZNF586" "CECR5"
  274. [25] "OR2D3" "INTS12" "LIPE" "SPDL1" "MARC2" "LCP1"
  275. > length(unique(g[duplicated(g)]))
  276. [1] 30
  277. > rnorm(n=10,mean = 0,sd=18)#列出<2的数值
  278. [1] 12.180906 -31.719927 -23.929819 1.933203 34.938306
  279. [6] 6.453842 13.887899 11.719862 5.991164 -25.730037
  280. > z <- rnorm(n=10,mean = 0,sd=18)
  281. > z[z < -2]
  282. [1] -19.53764 -12.31483 -7.96186 -15.47074 -35.08725
  283. > z[z <(-2)]
  284. [1] -19.53764 -12.31483 -7.96186 -15.47074 -35.08725