寫(xiě)在前面:寫(xiě)的比較簡(jiǎn)單,把基本知識(shí)點(diǎn)捋了一遍,主要是用來(lái)給自己理清思路和復(fù)習(xí)用的,適合有一定編程基礎(chǔ)的初學(xué)者來(lái)看。
R語(yǔ)言 基本語(yǔ)法
1. “Hello World!”
myString <- "Hello, World!"
print ( myString)
2. 怎么打注釋?
# This is how to quote.
R語(yǔ)言 數(shù)據(jù)類型
| 數(shù)據(jù)類型 | 元素 | 維度 |
|---|---|---|
| 向量 Vector | 同類型元素 | 一維 |
| 列表 List | 不同類型元素 | 一維 |
| 矩陣 Matrix | 同類型元素 | 二維 |
| 數(shù)組 Array | 同類型元素 | 多維 |
| 因子 Factor | 向量和向量不同值的標(biāo)簽 | 一維 |
| 數(shù)據(jù)幀 Data Frame | 不同類型相同長(zhǎng)度的向量 | 二維 |
1. 都有什么常用的數(shù)據(jù)類型?
邏輯型: TRUE, FALSE
數(shù)字:22.5, 5
整型:25L, 0L
復(fù)合型: 3+2i
字符型:'a', "Hello", '25.4'
原型:舉個(gè)例子
v<-charToRaw("Hello!")
print(v)
輸出結(jié)果:
[1] 48 65 6c 6c 6f 21
2. 向量Vector怎么用?
Vector由多個(gè)同類型的元素組成。
animal <- c('cat', 'dog', 'rabbit')
3. 列表List怎么用?
List可以由多個(gè)不同類型的元素組成。
list_ <- list(c(2,3,4),22,sin)
4. 矩陣Matrix怎么用?
Matrix是一個(gè)二位數(shù)據(jù)集。nrow代表行(橫著有幾行),ncol代表列(每行有幾個(gè))。
byrow true的時(shí)候按行填充(如下),否則按列填充。
M = matrix( c('a','a','b','c','b','a'), nrow = 2, ncol = 3, byrow = TRUE)
輸出結(jié)果:
[,1] [,2] [,3]
[1,] "a" "a" "b"
[2,] "c" "b" "a"
5. 數(shù)組Array怎么用?
Array是可以有多個(gè)維度的矩陣。Matrix可以視為一個(gè)二維的Array。
創(chuàng)建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))
輸出結(jié)果:
, , 1
[,1] [,2]
[1,] "green" "green"
[2,] "yellow" "yellow"
, , 2
[,1] [,2]
[1,] "green" "green"
[2,] "yellow" "yellow"
6. 因子Factor怎么用?
Factor表示了一個(gè)向量和向量中不同值的標(biāo)簽。
v <- c(1,1,1,1,2,2,4,3,3,3)
factor_v <- factor(v)
print(factor_v)
print(nlevels(factor_v))
輸出結(jié)果:
[1] 1 1 1 1 2 2 4 3 3 3
Levels: 1 2 3 4
[1] 4
7. 數(shù)據(jù)幀Data Frame怎么用?
Data Frame可以由不同類型、相同長(zhǎng)度的向量組成。
BMI <- data.frame(
gender = c("Male", "Male","Female"),
height = c(152, 171.5, 165),
weight = c(81,93, 78),
age = c(42,38,26)
)
輸出結(jié)果:
gender height weight age
1 Male 152.0 81 42
2 Male 171.5 93 38
3 Female 165.0 78 26
R語(yǔ)言 變量
1. 怎么賦值?
用"=" "<-" "->"賦值
2. 一些常用的函數(shù)
print():打印 print(var)
cat():打印多個(gè) cat("var is ", var)
ls():查找變量,匹配變量名
rm():刪除變量
class():輸出變量類型
is():判斷類型
R語(yǔ)言 運(yùn)算符
1. 算術(shù)運(yùn)算符
+、-、*、/、%%(求余)、%/%(相除求商)、^(指數(shù))
2. 關(guān)系運(yùn)算符
>、<、=、<=、>=、!=
3. 邏輯運(yùn)算符
判斷兩個(gè)向量的所有元素:&、|、!、
判斷兩個(gè)向量的第一個(gè)元素:&&、||
4. 賦值運(yùn)算符
<-、=、<<-、->、->>
5. 其他運(yùn)算符
:(為向量順序創(chuàng)建一系列數(shù)字)、%in%(某元素是否屬于某向量)、%*%(矩陣與其轉(zhuǎn)置矩陣相乘)
R語(yǔ)言 決策
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語(yǔ)言 數(shù)據(jù)重塑
1. 如何將多個(gè)向量合并成一個(gè)數(shù)據(jù)幀?
fruit <- c("Apple", "Orange")
num <- c(1,2)
list1 <- cbind(fruit, num)
2. 如何將兩個(gè)數(shù)據(jù)幀合并在一起?
- all.data <- rbind(data1, data2):縱向合并(表里面添加新行)
- merge():
使用的數(shù)據(jù)如下:
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)
①通過(guò)ID1、ID2把兩個(gè)數(shù)據(jù)幀連接起來(lái),取ID的交集
輸出結(jié)果:
total_student<-merge(x = student1, y = student2, by.x="ID1", by.y = "ID2")
ID1 name1 name2
1 1 Peter Peter
2 2 Tony Tony
②通過(guò)ID1、ID2把兩個(gè)數(shù)據(jù)幀連接起來(lái),取ID的并集,空缺位置填充為NA
total_student<-merge(x = student1, y = student2, by="ID1", by.y = "ID2", all = T)
all = F時(shí)是交集;all.x = T時(shí)左連接(只有1、2、3、4);all.y = T時(shí)右連接(只有1、2、7、8)
輸出結(jié)果:
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. 如何拆分?jǐn)?shù)據(jù)
使用melt():
注意需要安裝reshape這個(gè)包。
(使用的數(shù)據(jù)代表學(xué)生期中期末考的成績(jī)。)
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以外的列被轉(zhuǎn)換為了多行展示:
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. 如何重構(gòu)數(shù)據(jù)
使用cast():
cast()中公式左邊的變量會(huì)作為輸出的每一列,右邊的變量是因子,每個(gè)Level都會(huì)在輸出中作為一列。
(把期中期末的成績(jī)加和)
recasted_Transcript <- cast(molten_Transcript, Name+Test~variable,sum)
print(recasted_Transcript)
輸出結(jié)果:
Name Test Score
1 Steve Final 175
2 Tony Final 160
3 Tony Mid 100