数据的组织
包括向量、数据框、矩阵、列表四种形式

向量

向量是用于存储数值型、字符型或逻辑型数据的一维数组

1.生成方式

#(1)用 c() 结合到一起
c(2,5,6,2,9) 
c("a","f","md","b")
#(2)连续的数字用冒号“:” 
1:5
#(3)有重复的用rep(),有规律的序列用seq(),随机数用rnorm
rep("x",times=3)  
seq(from=3,to=21,by=3)
rnorm(n=3) 
#(4)通过组合,产生更为复杂的向量。
paste0(rep("x",times=3),1:3)###paste有连接符,paste0将数值直接连接

2.对单个向量操作

#(1)赋值给一个变量名
x = c(1,3,5,1) #随意的写法
x
x <- c(1,3,5,1) #规范的赋值符号 Alt+减号
x

#赋值+输出一起实现
x <- c(1,3,5,1);x
(x <- c(1,3,5,1))

#(2)简单数学计算
x+1
log(x)#对数
sqrt(x)#开平方

#(3)根据某条件进行判断,生成逻辑型向量
x>3
x==3
#(4)初级统计
max(x) #最大值
min(x) #最小值
mean(x) #均值
median(x) #中位数
var(x) #方差
sd(x) #标准差
sum(x) #总和
##众数
many <- function(x){
  table(x)
  index <- which.max(table(x))
  names(table(x)[index])}

length(x) #长度
unique(x) #去重复
duplicated(x) #对应元素是否重复
table(x) #重复值统计
sort(x)
sort(x,decreasing = F)
sort(x,decreasing = T)

3.对两个向量的操作

#####对两个向量进行的操作#####
x = c(1,3,5,1)
y = c(3,2,5,6)
#(1)比较运算,生成等长的逻辑向量
x == y 
y == x
#(2)数学计算
x + y
#(3)连接
paste(x,y,sep=",")

#当两个向量长度不一致
x = c(1,3,5,6,2)
y = c(3,2,5)
x==y
#循环补齐

#利用循环补齐简化代码
paste0(rep("x",3),1:3)
paste0("x",1:3)#简化后的代码

#(4)交集、并集、差集
intersect(x,y)##交集
union(x,y)##并集
setdiff(x,y)##向量x中却不在向量y中的元素
setdiff(y,x)##向量y中却不在向量x中的元素

x %in% y #x的每个元素在y中存在吗
y %in% x #y的每个元素在x中存在吗
##x==y不考虑位置,x %in% y 考虑位置,逐一比较

4.向量筛选

x <- 8:12
#根据逻辑值取子集
x[x==10]
x[x<12]
x[x %in% c(9,13)]
#grep函数可筛选关键词,grepl可显示筛选出来的行的逻辑值
#根据位置取子集
x[4]
x[2:4]
x[c(1,5)]
x[-4]
x[-(2:4)]

5.修改向量中的某个/某些元素

####修改向量中的某个/某些元素:取子集+赋值
x
#改一个元素
x[4] <- 40
x
#改多个元素
x[c(1,5)] <- c(80,20)
x
##R语言的修改,都要赋值,没有赋值,就没有发生过

# 补充:元素的名字

scores = c(100,59,73,95,45)
names(scores) = c("jimmy","nicker","Damon","Sophie","tony")
scores
scores["jimmy"]
scores[c("jimmy","nicker")]

names(scores)[scores>60]

### 如何调整元素顺序
x <- c("A","B","C","D","E");x
x[c(2, 4, 5, 1, 3)]

scores = c(100,59,73,95,45);scores
sort(scores)
scores[c(5,2,3,4,1)]

scores[order(scores)]
### order有什么用?

#scores依次属于以下几个小朋友
kids = c("jimmy","nicker","Damon","Sophie","tony")
#如何按照分数从低到高给小朋友的名字排序?
kids[order(scores)]

### match
x <- c("A","B","C","D","E");x
x[c(2, 4, 5, 1, 3)]
y <- c("B","D","E","A","C") 
match(y,x) 

x[match(y,x)]

6.简单作图

k1 = rnorm(12);k1
k2 = rep(c("a","b","c","d"),each = 3);k2
plot(k1)
绘图函数plot()
par(mfrow = c(2,2)) #把画板分成四块,两行两列
#如果报错,把右下角画板拉大一点即可
x = c(2,5,6,2,9);plot(x)
x = seq(2,80,4);plot(x)
x = rnorm(10);plot(x)
x = iris$Sepal.Length;plot(x)

#思考:plot画iris的前四列?
plot(iris[,1],col = iris[,5]) ##按照第5列数值显示颜色
plot(iris[,2],col = iris[,5])
plot(iris[,3],col = iris[,5])
plot(iris[,4],col = iris[,5])

boxplot(k1~k2)

7.其他

1.数据框约等于“表格”,不是文件,是R语言里面的一种数据结构
2.但凡被问,一律拒绝
3.不要手动操作,改变思维,学会用编程、函数解决问题
4.数据类型转换的优先顺序:逻辑型<数值型<字符型
5.空格和减号属于特殊字符,不建议使用
6.判断重复:从左到右,元素第一个出现视为不重复,第二次及多次出现视为重复
7.!duplicated(x)逆转
8.R的默认思想
9.两个长度不一样的向量交互时,会循环补齐,短的补齐长的,可利用循环补齐简化代码
10.中括号外面是数据
11.减号代表反选
12.如有嵌套,先内后外

代码均来源于生信技能树小洁老师

滴水穿石,加油!