【五分钟精通R语言】R数据类型、判断、循环

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
  1. 'a'
  2. 'b'
  3. 's'
  4. 'v'
  5. 'var_dic_list'
  6. 'w'
[1] TRUE
     [,1]
[1,]   50
logical
a == b
a < b 
a >= b
w = a <= b
  1. FALSE
  2. FALSE
  3. FALSE
  4. FALSE
  1. TRUE
  2. TRUE
  3. TRUE
  4. TRUE
  1. FALSE
  2. FALSE
  3. FALSE
  4. FALSE
三角函數和反三角函数
c(sin(pi/6),asin(0.5),tan(pi/3))
  1. 0.5
  2. 0.523598775598299
  3. 1.73205080756888

变量类型

向量
a = c(10, 20, 30, 40, 50)  # 向量创建
seq(1,50,2)  # 按间隔生成等向量
seq(1,50,length.out = 10)  # 按长度生成等差向量
rep(5,6)  # 重复数值
  1. 1
  2. 3
  3. 5
  4. 7
  5. 9
  6. 11
  7. 13
  8. 15
  9. 17
  10. 19
  11. 21
  12. 23
  13. 25
  14. 27
  15. 29
  16. 31
  17. 33
  18. 35
  19. 37
  20. 39
  21. 41
  22. 43
  23. 45
  24. 47
  25. 49
  1. 1
  2. 6.44444444444444
  3. 11.8888888888889
  4. 17.3333333333333
  5. 22.7777777777778
  6. 28.2222222222222
  7. 33.6666666666667
  8. 39.1111111111111
  9. 44.5555555555556
  10. 50
  1. 5
  2. 5
  3. 5
  4. 5
  5. 5
  6. 5
切片
c(a[1],a[1:2],a[c(1,5)])  # 向量切片 索引从1开始
w = c(-1,-4)
a[w]  # 负数表示去掉该数值
  1. 10
  2. 10
  3. 20
  4. 10
  5. 50
  1. 20
  2. 30
  3. 50
排序
b = rev(a)  # 反向排序
c(a,b)  # 拼接两个向量
sort(c(a,b))  # 对向量元素进行
order(c(a,b))  # 返回排序之后的索引
向量的统计
c(sum(a),mean(a),sd(a),range(a))
  1. 150
  2. 30
  3. 15.8113883008419
  4. 10
  5. 50
向量中常会用到 NA 和 NULL ,这里介绍一下这两个词语与区别:|
NA 代表的是"缺失",NULL 代表的是"不存在"。
NA 缺失就想占位符,代表这里没有一个值,但位置存在。
NULL 代表的就是数据不存在。
length(c(NA, NA, NULL))
c(NA, NA, NULL, NA)

2

  1. <NA>
  2. <NA>
  3. <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))
  1. TRUE
  2. TRUE
  3. TRUE
  4. TRUE
  5. TRUE
  6. FALSE
  7. FALSE
  8. FALSE
  9. FALSE
  10. FALSE
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  1. 100
  2. 90
  3. 80
  4. 70
  5. 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]
    1. 11
    2. 22
    3. 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
  1. 11
  2. 22
  3. 33
$shuzi
119.1

‘runoob’

list_data[5] <- 'hello'  # 添加新的元素 
list_data[4] <- NULL  # 删除元素 
list_data[1] <- "我替换来第三个元素"  # 跟新元素
list_data
$name_1
'我替换来第三个元素'
$name_2
'google'
$xiangliang
  1. 11
  2. 22
  3. 33
[[4]]
'hello'
list1 <- list(1,2,3)
list2 <- list("Google","Runoob","Taobao")

# 合并列表
l3 <- c(list1,list2)
l3
  1. 1
  2. 2
  3. 3
  4. 'Google'
  5. 'Runoob'
  6. 'Taobao'
unlist 拆解列表元素
l4 = list(1:5)
l5 = list('a','b',c(1,2))
unlist(l4)
unlist(l5)
list(l4,l5)
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  1. 'a'
  2. 'b'
  3. '1'
  4. '2'
      1. 1
      2. 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)  # 矩阵相乘 
A matrix: 2 × 3 of type int
135
246
A matrix: 3 × 2 of type int
12
34
56
A matrix: 2 × 2 of type dbl
3544
4456
数据框
数据框每一列都有一个唯一的列名,长度都是相等的,同一列的数据类型需要一致,不同列的数据类型可以不一样。

由多个向量合并成数据框

姓名 = 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
A data.frame: 3 × 3
姓名工号月薪
<chr><chr><dbl>
张三0011000
李四0022000
王五0033000
     姓名               工号                月薪     
 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  
A data.frame: 2 × 3
姓名工号月薪
<chr><chr><dbl>
1张三0011000
2李四0022000
A data.frame: 2 × 2
姓名工号
<chr><chr>
2李四002
3王五003
  1. '001'
  2. '002'
  3. '003'
A data.frame: 3 × 4
姓名工号月薪年龄
<chr><chr><dbl><dbl>
张三001100020
李四002200025
王五003300046
A data.frame: 5 × 4
姓名工号月薪年龄
<chr><chr><dbl><dbl>
张三001100020
李四002200025
王五003300046
小明101500090
小白102700062
因子
x <- c("男", "女", "男", "男",  "女")
sex <- factor(x)
sex
v <- gl(3, 4, labels = c("Google", "Runoob","Taobao"))
v
Levels:
  1. '男'
  2. '女'
  1. Google
  2. Google
  3. Google
  4. Google
  5. Runoob
  6. Runoob
  7. Runoob
  8. Runoob
  9. Taobao
  10. Taobao
  11. Taobao
  12. Taobao
Levels:
  1. 'Google'
  2. 'Runoob'
  3. '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))
  1. -8
  2. -21
  3. -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)]


  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值