写在前面:写的比较简单,把基本知识点捋了一遍,主要是用来给自己理清思路和复习用的,适合有一定编程基础的初学者来看。
R语言 基本语法
1. “Hello World!”
myString <- "Hello, World!"
print ( myString)
2. 怎么打注释?
# This is how to quote.
R语言 数据类型
数据类型 | 元素 | 维度 |
---|---|---|
向量 Vector | 同类型元素 | 一维 |
列表 List | 不同类型元素 | 一维 |
矩阵 Matrix | 同类型元素 | 二维 |
数组 Array | 同类型元素 | 多维 |
因子 Factor | 向量和向量不同值的标签 | 一维 |
数据帧 Data Frame | 不同类型相同长度的向量 | 二维 |
1. 都有什么常用的数据类型?
逻辑型: TRUE, FALSE
数字:22.5, 5
整型:25L, 0L
复合型: 3+2i
字符型:'a', "Hello", '25.4'
原型:举个例子
v<-charToRaw("Hello!")
print(v)
输出结果:
[1] 48 65 6c 6c 6f 21
2. 向量Vector怎么用?
Vector由多个同类型的元素组成。
animal <- c('cat', 'dog', 'rabbit')
3. 列表List怎么用?
List可以由多个不同类型的元素组成。
list_ <- list(c(2,3,4),22,sin)
4. 矩阵Matrix怎么用?
Matrix是一个二位数据集。nrow代表行(横着有几行),ncol代表列(每行有几个)。
byrow true的时候按行填充(如下),否则按列填充。
M = matrix( c('a','a','b','c','b','a'), nrow = 2, ncol = 3, byrow = TRUE)
输出结果:
[,1] [,2] [,3]
[1,] "a" "a" "b"
[2,] "c" "b" "a"
5. 数组Array怎么用?
Array是可以有多个维度的矩阵。Matrix可以视为一个二维的Array。
创建Array的方式:
a <- array(c('green','yellow'),dim = c(2,2,2))
a<-c('green', 'yellow', 'green', 'yellow', 'green', 'yellow', 'green', 'yellow')
dim(a)<-c(2,2,2)
#或者a<-array(a, dim=c(2,2,2))
输出结果:
, , 1
[,1] [,2]
[1,] "green" "green"
[2,] "yellow" "yellow"
, , 2
[,1] [,2]
[1,] "green" "green"
[2,] "yellow" "yellow"
6. 因子Factor怎么用?
Factor表示了一个向量和向量中不同值的标签。
v <- c(1,1,1,1,2,2,4,3,3,3)
factor_v <- factor(v)
print(factor_v)
print(nlevels(factor_v))
输出结果:
[1] 1 1 1 1 2 2 4 3 3 3
Levels: 1 2 3 4
[1] 4
7. 数据帧Data Frame怎么用?
Data Frame可以由不同类型、相同长度的向量组成。
BMI <- data.frame(
gender = c("Male", "Male","Female"),
height = c(152, 171.5, 165),
weight = c(81,93, 78),
age = c(42,38,26)
)
输出结果:
gender height weight age
1 Male 152.0 81 42
2 Male 171.5 93 38
3 Female 165.0 78 26
R语言 变量
1. 怎么赋值?
用"=" "<-" "->"赋值
2. 一些常用的函数
print():打印 print(var)
cat():打印多个 cat("var is ", var)
ls():查找变量,匹配变量名
rm():删除变量
class():输出变量类型
is():判断类型
R语言 运算符
1. 算术运算符
+、-、*、/、%%(求余)、%/%(相除求商)、^(指数)
2. 关系运算符
>、<、=、<=、>=、!=
3. 逻辑运算符
判断两个向量的所有元素:&、|、!、
判断两个向量的第一个元素:&&、||
4. 赋值运算符
<-、=、<<-、->、->>
5. 其他运算符
:(为向量顺序创建一系列数字)、%in%(某元素是否属于某向量)、%*%(矩阵与其转置矩阵相乘)
R语言 决策
1. if
if(boolean_expression) { }
2. if...else
if(boolean_expression 1) { }
else if( boolean_expression 2) { }
else { }
3. switch
switch(expression, case1, case2, case3....)
R语言 数据重塑
1. 如何将多个向量合并成一个数据帧?
fruit <- c("Apple", "Orange")
num <- c(1,2)
list1 <- cbind(fruit, num)
2. 如何将两个数据帧合并在一起?
- all.data <- rbind(data1, data2):纵向合并(表里面添加新行)
- merge():
使用的数据如下:
ID1 <- c(1,2,3,4)
ID2 <- c(1,2,7,8)
name1 <-c("Peter","Tony","Steve","Tom")
name2 <- c("Peter","Tony","Natasha","Bruce")
student1 <- data.frame(ID1,name1)
student2 <- data.frame(ID2,name2)
①通过ID1、ID2把两个数据帧连接起来,取ID的交集
输出结果:
total_student<-merge(x = student1, y = student2, by.x="ID1", by.y = "ID2")
ID1 name1 name2
1 1 Peter Peter
2 2 Tony Tony
②通过ID1、ID2把两个数据帧连接起来,取ID的并集,空缺位置填充为NA
total_student<-merge(x = student1, y = student2, by="ID1", by.y = "ID2", all = T)
all = F时是交集;all.x = T时左连接(只有1、2、3、4);all.y = T时右连接(只有1、2、7、8)
输出结果:
ID1 name1 name2
1 1 Peter Peter
2 2 Tony Tony
3 3 Steve <NA>
4 4 Tom <NA>
5 7 <NA> Natasha
6 8 <NA> Bruce
3. 如何拆分数据
使用melt():
注意需要安装reshape这个包。
(使用的数据代表学生期中期末考的成绩。)
install.packages("reshape")
library(reshape)
Name <- c("Tony", "Tony", "Tony", "Steve", "Steve")
Test <- c("Mid","Final","Final","Final", "Final")
Score <- c(100, 100, 60, 80, 95)
Transcript <- data.frame(Name, Test, Score)
molten_Transcript <- melt(Transcript, id = c("Name", "Test"))
print(molten_Transcript)
除Name、Test以外的列被转换为了多行展示:
Name Test variable value
1 Tony Mid Score 100
2 Tony Final Score 100
3 Tony Final Score 60
4 Steve Final Score 80
5 Steve Final Score 95
4. 如何重构数据
使用cast():
cast()中公式左边的变量会作为输出的每一列,右边的变量是因子,每个Level都会在输出中作为一列。
(把期中期末的成绩加和)
recasted_Transcript <- cast(molten_Transcript, Name+Test~variable,sum)
print(recasted_Transcript)
输出结果:
Name Test Score
1 Steve Final 175
2 Tony Final 160
3 Tony Mid 100