R的基本运算
a = c(1,2,3,4)
b = c(3,4,5,6)
print(a + b)
print(a ^ b) # a ** b
print(a %% b) # 整除取余
print(a %/% b) # 整除
v <- a # 向左赋值
b -> w # 向右赋值
ls() # 列出所有变量
print( 1 %in% v) # 相当于 in
print(a %*% b) # 相当于 a*a.T
s = 1:10
[1] 4 6 8 10
[1] 1 16 243 4096
[1] 1 2 3 4
[1] 0 0 0 0
- 'a'
- 'b'
- 's'
- 'v'
- 'var_dic_list'
- 'w'
[1] TRUE
[,1]
[1,] 50
logical
a == b
a < b
a >= b
w = a <= b
- FALSE
- FALSE
- FALSE
- FALSE
- TRUE
- TRUE
- TRUE
- TRUE
- FALSE
- FALSE
- FALSE
- FALSE
三角函數和反三角函数
c(sin(pi/6),asin(0.5),tan(pi/3))
- 0.5
- 0.523598775598299
- 1.73205080756888
变量类型
向量
a = c(10, 20, 30, 40, 50) # 向量创建
seq(1,50,2) # 按间隔生成等向量
seq(1,50,length.out = 10) # 按长度生成等差向量
rep(5,6) # 重复数值
- 1
- 3
- 5
- 7
- 9
- 11
- 13
- 15
- 17
- 19
- 21
- 23
- 25
- 27
- 29
- 31
- 33
- 35
- 37
- 39
- 41
- 43
- 45
- 47
- 49
- 1
- 6.44444444444444
- 11.8888888888889
- 17.3333333333333
- 22.7777777777778
- 28.2222222222222
- 33.6666666666667
- 39.1111111111111
- 44.5555555555556
- 50
- 5
- 5
- 5
- 5
- 5
- 5
切片
c(a[1],a[1:2],a[c(1,5)]) # 向量切片 索引从1开始
w = c(-1,-4)
a[w] # 负数表示去掉该数值
- 10
- 10
- 20
- 10
- 50
- 20
- 30
- 50
排序
b = rev(a) # 反向排序
c(a,b) # 拼接两个向量
sort(c(a,b)) # 对向量元素进行
order(c(a,b)) # 返回排序之后的索引
向量的统计
c(sum(a),mean(a),sd(a),range(a))
- 150
- 30
- 15.8113883008419
- 10
- 50
向量中常会用到 NA 和 NULL ,这里介绍一下这两个词语与区别:|
NA 代表的是"缺失",NULL 代表的是"不存在"。
NA 缺失就想占位符,代表这里没有一个值,但位置存在。
NULL 代表的就是数据不存在。
length(c(NA, NA, NULL))
c(NA, NA, NULL, NA)
2
- <NA>
- <NA>
- <NA>
logical and which
a = seq(10,100,10)
rev(a) >= a
which(rev(a) >= a) # whcih 返回值为TRUE的索引
rev(a)[which(rev(a) > a)]
all(c(1,1,0))
any(c(0,0,0))
any(c(0,0,1))
- TRUE
- TRUE
- TRUE
- TRUE
- TRUE
- FALSE
- FALSE
- FALSE
- FALSE
- FALSE
- 1
- 2
- 3
- 4
- 5
- 100
- 90
- 80
- 70
- 60
Warning message in all(c(1, 1, 0)):
"将种类为'double'的参数强迫转化为逻辑值"
FALSE
Warning message in any(c(0, 0, 0)):
"将种类为'double'的参数强迫转化为逻辑值"
FALSE
Warning message in any(c(0, 0, 1)):
"将种类为'double'的参数强迫转化为逻辑值"
TRUE
字符串
拼接
大小写 长度
格式化输出
R 字符串拼接使用paste 不能直接加
a = 'hello'
b = 'world'
c = 'good'
paste(a,b)
paste(a,b,sep = '-')
paste(a,b,collapse = '--')
paste(letters[1:6],1:6, collapse = ".")
‘hello world’
‘hello-world’
‘hello world’
‘a 1.b 2.c 3.d 4.e 5.f 6’
s = "Google Runoob Taobao"
result <- nchar("Google Runoob Taobao") # 字符串长度
print(result)
toupper("Google Runoob Taobao") # 大写转化
tolower("Google Runoob Taobao") # 小写转化
substring(s,5,8)
[1] 20
‘GOOGLE RUNOOB TAOBAO’
‘google runoob taobao’
‘le R’
name = 'xiaoming'
postion = 'dajie'
age = 10
sprintf('my name is %s,i am %d,%s',name,age,postion)
‘my name is xiaoming,i am 10,dajie’
列表
列表建立和切片
list_data <- list("runoob", "google", c(11,22,33), 119.1)
list_data[3]
c(11,22,33)[1]
-
- 11
- 22
- 33
11
列表修改
names(list_data) <- c('name_1','name_2','xiangliang','shuzi') # 向量设置名字
list_data
list_data$name_1 # 按名字提取元素
-
$name_1
- 'runoob' $name_2
- 'google' $xiangliang
-
- 11
- 22
- 33
$shuzi
- 119.1
‘runoob’
list_data[5] <- 'hello' # 添加新的元素
list_data[4] <- NULL # 删除元素
list_data[1] <- "我替换来第三个元素" # 跟新元素
list_data
-
$name_1
- '我替换来第三个元素' $name_2
- 'google' $xiangliang
-
- 11
- 22
- 33
[[4]]
- 'hello'
list1 <- list(1,2,3)
list2 <- list("Google","Runoob","Taobao")
# 合并列表
l3 <- c(list1,list2)
l3
- 1
- 2
- 3
- 'Google'
- 'Runoob'
- 'Taobao'
unlist 拆解列表元素
l4 = list(1:5)
l5 = list('a','b',c(1,2))
unlist(l4)
unlist(l5)
list(l4,l5)
- 1
- 2
- 3
- 4
- 5
- 'a'
- 'b'
- '1'
- '2'
-
-
- 1
- 2
-
class(unlist(l5))
class(l4)
class(unlist(list(l4,l5)))
‘character’
‘list’
‘character’
矩阵
语言为线性代数的研究提供了矩阵类型,这种数据结构很类似于其它语言中的二维数组,但 R 提供了语言级的矩阵运算支持。矩阵里的元素可以是数字、符号或数学式。
matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,dimnames = NULL)
data 向量 矩阵的数据
nrow 行数
ncol 列数
byrow 逻辑值,为 FALSE 按列排列,为 TRUE 按行排列
dimanames 行列名称
M = matrix(c(1:20),nrow = 3,ncol = 3,byrow = FALSE,dimnames = list(c('a','b','c'),c('A','B','C')))
Warning message in matrix(c(1:20), nrow = 3, ncol = 3, byrow = FALSE, dimnames = list(c("a", :
"数据长度[20]不是矩阵行数[3]的整倍"
M[1,2] # 第一行第二个元素
M[1,] # 第一行的所有元素
M[,3] # 第二行的所有元素
4
-
A
- 1 B
- 4 C
- 7
-
a
- 7 b
- 8 c
- 9
M3 = matrix(c(1:6),nrow = 2)
M3
t(M3) # 矩阵进行转置
M3 %*% t(M3) # 矩阵相乘
1 | 3 | 5 |
2 | 4 | 6 |
1 | 2 |
3 | 4 |
5 | 6 |
35 | 44 |
44 | 56 |
数据框
数据框每一列都有一个唯一的列名,长度都是相等的,同一列的数据类型需要一致,不同列的数据类型可以不一样。
由多个向量合并成数据框
姓名 = c("张三", "李四",'王五')
工号 = c("001","002",'003')
月薪 = c(1000, 2000,3000)
table_1 = data.frame(姓名,工号,月薪) # 合并dataframe
table_1
summary(table_1) # 相当于 describe
table_1[1:2,] # 索引
table_1[c(2,3),c(1,2)] # 利用向量索引
table_1$工号 # 根据列名索引
table_1$年龄 = c(20,25,46) # 新增一列
table_1
newtable = data.frame(
姓名 = c("小明", "小白"),
工号 = c("101","102"),
月薪 = c(5000, 7000),
年龄 = c(90,62)
)
result <- rbind(table_1,newtable) # 新增行
result
姓名 | 工号 | 月薪 |
---|---|---|
<chr> | <chr> | <dbl> |
张三 | 001 | 1000 |
李四 | 002 | 2000 |
王五 | 003 | 3000 |
姓名 工号 月薪
Length:3 Length:3 Min. :1000
Class :character Class :character 1st Qu.:1500
Mode :character Mode :character Median :2000
Mean :2000
3rd Qu.:2500
Max. :3000
姓名 | 工号 | 月薪 | |
---|---|---|---|
<chr> | <chr> | <dbl> | |
1 | 张三 | 001 | 1000 |
2 | 李四 | 002 | 2000 |
姓名 | 工号 | |
---|---|---|
<chr> | <chr> | |
2 | 李四 | 002 |
3 | 王五 | 003 |
- '001'
- '002'
- '003'
姓名 | 工号 | 月薪 | 年龄 |
---|---|---|---|
<chr> | <chr> | <dbl> | <dbl> |
张三 | 001 | 1000 | 20 |
李四 | 002 | 2000 | 25 |
王五 | 003 | 3000 | 46 |
姓名 | 工号 | 月薪 | 年龄 |
---|---|---|---|
<chr> | <chr> | <dbl> | <dbl> |
张三 | 001 | 1000 | 20 |
李四 | 002 | 2000 | 25 |
王五 | 003 | 3000 | 46 |
小明 | 101 | 5000 | 90 |
小白 | 102 | 7000 | 62 |
因子
x <- c("男", "女", "男", "男", "女")
sex <- factor(x)
sex
v <- gl(3, 4, labels = c("Google", "Runoob","Taobao"))
v
- 男
- 女
- 男
- 男
- 女
- '男'
- '女'
- Runoob
- Runoob
- Runoob
- Runoob
- Taobao
- Taobao
- Taobao
- Taobao
- 'Google'
- 'Runoob'
- 'Taobao'
判断
if(boolean_expression) {
// 如果布尔表达式为真将执行的语句
} else {
// 如果布尔表达式为假将执行的语句
}
x <- 50L
if(is.integer(x)) {
print("X 是一个整数")
}
[1] "X 是一个整数"
a = seq(1,6,length.out = 4)
if (a>3){
print(a-3)
}else{
print(3-a)
}
Warning message in if (a > 3) {:
"条件的长度大于一,因此只能用其第一元素"
[1] 2.0000000 0.3333333 -1.3333333 -3.0000000
if(boolean_expression 1) {
// 如果布尔表达式 boolean_expression 1 为真将执行的语句
} else if( boolean_expression 2) {
// 如果布尔表达式 boolean_expression 2 为真将执行的语句
} else if( boolean_expression 3) {
// 如果布尔表达式 boolean_expression 3 为真将执行的语句
} else {
// 以上所有的布尔表达式都为 false 时执行
}
循环
repeat
循环会一直执行代码,直到条件语句为 false 时才退出循环,退出要使用到 break 语句。
repeat {
// 相关代码
if(condition) {
break
}
}
v <- c("Google","Runoob")
cnt <- 2
repeat {
print(v)
cnt <- cnt+1
if(cnt > 5) {
break
}
}
[1] "Google" "Runoob"
[1] "Google" "Runoob"
[1] "Google" "Runoob"
[1] "Google" "Runoob"
while
只要给定的条件为 true,R 语言中的 while 循环语句会重复执行一个目标语句
while(condition)
{
statement(s);
}
v <- c("Google","Runoob")
cnt <- 2
while (cnt < 7) {
print(v)
cnt = cnt + 1
}
[1] "Google" "Runoob"
[1] "Google" "Runoob"
[1] "Google" "Runoob"
[1] "Google" "Runoob"
[1] "Google" "Runoob"
for
循环语句可以重复执行指定语句,重复次数可在 for 语句中控制。
for (value in vector) {
statements
}
for (i in v){
print(i)
}
[1] "Google"
[1] "Runoob"
函数
function_name <- function(arg_1, arg_2, ...) {
// 函数体
}
fun_sq = function(a,b){
w = a^2 - b^2
return (w)
}
fun_sq(5,1)
24
fun_sq(c(1,2,3),c(3,5,6))
- -8
- -21
- -27
包
library()
install.packages("ggplot2") # 安装包
Installing package into 'C:/Users/C peg/Documents/R/win-library/4.0'
(as 'lib' is unspecified)
also installing the dependencies 'colorspace', 'farver', 'labeling', 'munsell', 'RColorBrewer', 'viridisLite', 'gtable', 'isoband', 'scales'
package 'colorspace' successfully unpacked and MD5 sums checked
package 'farver' successfully unpacked and MD5 sums checked
package 'labeling' successfully unpacked and MD5 sums checked
package 'munsell' successfully unpacked and MD5 sums checked
package 'RColorBrewer' successfully unpacked and MD5 sums checked
package 'viridisLite' successfully unpacked and MD5 sums checked
package 'gtable' successfully unpacked and MD5 sums checked
package 'isoband' successfully unpacked and MD5 sums checked
package 'scales' successfully unpacked and MD5 sums checked
package 'ggplot2' successfully unpacked and MD5 sums checked
The downloaded binary packages are in
C:\Users\C peg\AppData\Local\Temp\RtmpkZUpGz\downloaded_packages
library(ggplot2) # 导入包
ggplot(diamonds)
ggplot(diamonds, aes(x=carat)) # 如果只有X-axis值 Y-axis can be specified in respective geoms.
ggplot(diamonds, aes(x=carat, y=price)) # if both X and Y axes are fixed for all layers.
ggplot(diamonds, aes(x=carat, color=cut)) # 'cut' 变量每种类型单独一个颜色, once a geom is added.
ggplot(diamonds, aes(x=carat), color="steelblue")
gg <- ggplot(diamonds, aes(x=carat, y=price))
gg + geom_point()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8r4aFqxZ-1600764449455)(output_68_0.png)]