R語法
1.賦值操作
符號(hào)“<-”表賦值,myString <- "Hello, World!"
2.注釋
單引號(hào)和雙引號(hào)表示跨行注釋帆疟,#號(hào)表單行注釋
3.數(shù)據(jù)類型:
1.注意事項(xiàng)
1.R為動(dòng)態(tài)語言,不需要聲明
2.R與Python類似,以function()傳遞函數(shù)
2.基本數(shù)據(jù)類型
數(shù)據(jù)類型 | 值 | 舉例 |
---|---|---|
logical(邏輯型) | TRUE鹃栽,F(xiàn)ALSE | v <- TRUE; print(class(v));輸出為:logical |
Numeric(數(shù)字型) | 0-9 | v <- 2;print(class(v));輸出為:numerical |
integer(整型) | 0L档玻,1L | v <- 5L;print(class(v));輸出為:integer |
Complex(復(fù)合型) | 3 + 2i | v <- 3 + 2i;print(class(v));輸出為:complex |
Character(字符) | 'a',"b" | v <- 'a';print(class(v));輸出為:character |
Raw(原型) | 'char'直接被儲(chǔ)存為編碼 | v <- charToRaw("Hello");print(class(v));輸出為:raw |
3.Vector向量
函數(shù) c() 表示將 多個(gè)元素組合成向量
#creat a vector
apple <- c('red','green,'yellow')
print (apple)
輸出為
[1] "red" "green" "yellow"
4.Lists 列表
使用函數(shù) list()創(chuàng)建怀泊,列表是一個(gè)R對(duì)象,可以包含數(shù)字误趴,字母霹琼,甚至列表和函數(shù),
list <- list(c(1,2,3),2.5,2,'test')
print (list)
輸出結(jié)果為
[[1]]
[1] 1 2 3
[[2]]
[1] 2.5
[[3]]
[1] 2
[[4]]
[1] "test"
5.Matrices 矩陣
使用函數(shù) matrix() 創(chuàng)建,表示二維數(shù)據(jù)凉当,其中 matrix() 函數(shù)參數(shù)解析:matrix(vector枣申,nrow,ncol看杭,byrow)
M <- matrix(c(1,2,3,4,5,6,7,8,9),nrow=3,ncol=3,byrow=TRUE)
print(M)
輸出結(jié)果為
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
6.Arrays 數(shù)組
使用函數(shù) array() 創(chuàng)建忠藤,數(shù)組Arrays類似于matrix,但是其維數(shù)可以多于二維楼雹。其中關(guān)于 array()函數(shù),完整參數(shù)為 array(vector模孩,dim=vector)
a <- array(c('green','yellow'),dim = c(3,3,2))
print(a)
輸出結(jié)果為
, , 1
[,1] [,2] [,3]
[1,] "green" "yellow" "green"
[2,] "yellow" "green" "yellow"
[3,] "green" "yellow" "green"
, , 2
[,1] [,2] [,3]
[1,] "yellow" "green" "yellow"
[2,] "green" "yellow" "green"
[3,] "yellow" "green" "yellow"
7.Factors 因子
因子是使用向量創(chuàng)建的R對(duì)象。 它將向量與向量中元素的不同值一起存儲(chǔ)為標(biāo)簽烘豹。 標(biāo)簽總是字符瓜贾,不管它在輸入向量中是數(shù)字還是字符或布爾等。 它們?cè)诮y(tǒng)計(jì)建模中非常有用携悯。
使用 factor() 函數(shù)創(chuàng)建因子祭芦。nlevels函數(shù)給出級(jí)別計(jì)數(shù)。
apple_colors <- c('green','green','yellow','red','red','red','green')
factor_apple <- factor(apple_colors)
輸出結(jié)果為:
[1] green green yellow red red red yellow green
8.Data Frames 數(shù)據(jù)幀
數(shù)據(jù)幀是表格數(shù)據(jù)對(duì)象憔鬼。 與數(shù)據(jù)幀中的矩陣不同龟劲,每列可以包含不同的數(shù)據(jù)模式。 第一列可以是數(shù)字轴或,而第二列可以是字符昌跌,第三列可以是邏輯的。 它是等長(zhǎng)度的向量的列表照雁。
使用==data.frame()==函數(shù)創(chuàng)建數(shù)據(jù)幀蚕愤。
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
4.變量
1.變量賦值
- 向左運(yùn)算符,表示方式:a <- 1;表示將1賦值給a
- 向右運(yùn)算符萍诱,表示方式:2 -> a悬嗓;表示將2賦值給a
- 等于符號(hào),表示方式:a = 3裕坊;表示將3賦值給a
2.輸出變量
- cat()函數(shù):cat('text',var)
- print()函數(shù):print('text',var)
3.變量的數(shù)據(jù)類型
- R屬于動(dòng)態(tài)類型語言包竹,變量的數(shù)據(jù)類型取決于輸入
- 變量類型函數(shù):class()
a = 1
print (class(a))
output:
numeric
4.查找變量
查找所有變量,應(yīng)使用 ls()函數(shù)
代碼示例:print(ls())
代碼輸出:[1] "my var" "my_new_var" "my_var" "var.1"
查找特定變量
使用 ls()函數(shù) 匹配模式
代碼示例:print(ls(pattern = 'var'))
代碼輸出:[1] "my var" "my_new_var" "my_var" "var.1"
刪除變量
使用 rm()函數(shù) 刪除變量籍凝,使用 參數(shù)list 可以刪除多個(gè)變量
代碼示例:rm(list = ls(pattern = 'var'))
5. 運(yùn)算符
1. 算術(shù)運(yùn)輸符
運(yùn)算符 | 描述 | 示例 |
---|---|---|
+ | 兩向量相加 | a = c(1,2,3);b = c(4,5,6);print (a+b) |
- | 兩向量相減 | a = c(4,5,6);b = c(1,2,3);print (a-b) |
* | 兩向量相乘 | a = c(1,2,3);b = c(4,5,6);print (a*b) |
/ | 兩向量相除 | a = c(2,4,6);b = c(1,2,3);print (a/b) |
%% | 兩向量求余 | a = c(1,2,3);b = c(4,5,6);print (a%%b) |
%/% | 兩向量相除求整 | a = c(1,3,5);b = c(1,2,3);print (a%/%b) |
^ | 將第二向量作為第一向量的指數(shù) | a = c(1,3,5);b = c(1,2,3);print (a^b) |
2. 關(guān)系運(yùn)算符
運(yùn)算符 | 描述 | 示例 |
---|---|---|
> | 檢查第一向量的每個(gè)元素是否大于第二向量的相應(yīng)元素 | v<-c(2,5,6);t<-c(8,2,1);print(v>t) |
< | 檢查第一個(gè)向量的每個(gè)元素是否小于第二個(gè)向量的相應(yīng)元素 | v<-c(2,5,6);t<-c(8,2,1);print(v< t) |
== | 檢查第一個(gè)向量的每個(gè)元素是否等于第二個(gè)向量的相應(yīng)元素 | v<-c(2,5,6);t<-c(8,2,1);print(v==t) |
<= | 檢查第一向量的每個(gè)元素是否小于或等于第二向量的相應(yīng)元素 | v<-c(2,5,6);t<-c(8,2,1);print(v<=t) |
>= | 檢查第一向量的每個(gè)元素是否大于或等于第二向量的相應(yīng)元素 | v<-c(2,5,6);t<-c(8,2,1);print(v>=t) |
!= | 檢查第一個(gè)向量的每個(gè)元素是否不等于第二個(gè)向量的相應(yīng)元素 | v<-c(2,5,6);t<-c(8,2,1);print(v!=t) |
3. 邏輯運(yùn)算符
運(yùn)算符 | 描述 |
---|---|
& | AND運(yùn)算符,兩向量對(duì)應(yīng)元素均為 TRUE周瞎,則輸出向量對(duì)應(yīng)元素為 TRUE |
I | 或運(yùn)算符,兩向量對(duì)應(yīng)元素有一元素為真,則輸出向量對(duì)應(yīng)元素為 TRUE |
! | 非運(yùn)算符,對(duì)輸入向量的元素饵蒂,取相反值作為 輸出向量 |
4. 特殊邏輯運(yùn)算符
運(yùn)算符 | 描述 |
---|---|
&& | AND運(yùn)算符声诸,取兩個(gè)向量的第一個(gè)元素,并且只有兩個(gè)都為TRUE時(shí)才給出TRUE |
II | OR運(yùn)算符苹享,取兩個(gè)向量的第一個(gè)元素双絮,如果其中一個(gè)為TRUE,則給出TRUE |
5. 其他運(yùn)算符
運(yùn)算符 | 描述 | 示例 |
---|---|---|
: | 冒號(hào)運(yùn)算符得问,按順序創(chuàng)造數(shù)字向量 | V = 2:5 |
%*% | 將矩陣與其轉(zhuǎn)置相乘 | 略 |
6.R語言包
1. 安裝新的包
install.packages("Package Name")
//或者
install.packages(file_name_with_path, repos = NULL, type = "source")
2.裝載包到庫中
library("package Name", lib.loc = "path to library")
7.條件語句
1.IF條件語句
if(boolean_expression) {
// statement(s) will execute if the boolean expression is true.
}
2.IF...ELSE語句
if(boolean_expression) {
// statement(s) will execute if the boolean expression is true.
} else {
// statement(s) will execute if the boolean expression is false.
}
3.SWITCH語句
switch(expression, case1, case2, case3....)
8.循環(huán)語句
1.Repeat循環(huán)
Repeat循環(huán)重復(fù)執(zhí)行相同的代碼囤攀,直到滿足停止條件
repeat {
commands
if(condition) {
break
}
}
2.While循環(huán)
While循環(huán)一次又一次地執(zhí)行相同的代碼,直到滿足停止條件
while (test_expression) {
statement
}
3. For循環(huán)
R的for循環(huán)是特別靈活的宫纬,因?yàn)樗鼈儾幌抻谡麛?shù)焚挠,或者輸入中的偶數(shù)。 我們可以傳遞字符向量漓骚,邏輯向量蝌衔,列表或表達(dá)式
for (test_expression) {
statement
}
此處補(bǔ)充示例:
v <- LETTERS[1:4]
for ( i in v) {
print(i)
}
4.循環(huán)控制語句
- break語句:跳出循環(huán),執(zhí)行以后語句
- next語句:跳過本次迭代蝌蹂,并開始循環(huán)的下一次迭代
9.數(shù)據(jù)重塑
修改R數(shù)據(jù)集的格式噩斟,改變行列數(shù)據(jù)呈現(xiàn)方式
1.合并向量
cband()函數(shù):用于合并多個(gè)向量為一個(gè)數(shù)據(jù)幀(矩陣合并,按行合并)
rband()函數(shù):用于合并兩個(gè)數(shù)據(jù)幀(矩陣合并孤个,安列合并)
a = c(1,1,1)
b = c(2,2,2)
c = rbind(a,b)
d = cbind(a,b)
輸出結(jié)果為:
#rbind函數(shù)
[,1] [,2] [,3]
a 1 1 1
b 2 2 2
#cbind函數(shù)
a b
[1,] 1 2
[2,] 1 2
[3,] 1 2
2.合并數(shù)據(jù)幀————merge函數(shù)
merge(x, y, by = intersect(names(x), names(y)),
by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,
sort = TRUE, suffixes = c(".x",".y"),
incomparables = NULL, ...)
函數(shù)解析:
merge函數(shù)參數(shù)的說明:
x,y:用于合并的兩個(gè)數(shù)據(jù)框
by,by.x,by.y:指定依據(jù)哪些行合并數(shù)據(jù)框,默認(rèn)值為相同列名的列.
all,all.x,all.y:指定x和y的行是否應(yīng)該全在輸出文件.
sort:by指定的列是否要排序.
3.重塑數(shù)據(jù)————melt函數(shù)
melt函數(shù)可用于重塑數(shù)據(jù)集
melt(data,id.vars=c("Name1","Name2",...),variable.name="Name3",value.name="Name4")
函數(shù)參數(shù)解析:
data剃允,為 melt函數(shù) 的數(shù)據(jù)對(duì)象
id.var,表示數(shù)據(jù)對(duì)象中保持不變的數(shù)據(jù)標(biāo)簽齐鲤,除id.vars指定的標(biāo)簽外斥废,其余標(biāo)簽均需要重塑
variable.name,用以指定需要重塑的標(biāo)簽所在列的名稱
value.name给郊,用以指定需要重塑的標(biāo)簽的值所在列的名稱
代碼示例
data<-data.frame(
Name = c("蘋果","谷歌","臉書","亞馬遜","騰訊"),
Company = c("Apple","Google","Facebook","Amozon","Tencent"),
Sale2013 = c(5000,3500,2300,2100,3100),
Sale2014 = c(5050,3800,2900,2500,3300)
)
print(data)
mydata<-melt(data,id.vars=c("Name","Company"),variable.name="Year",value.name="Sale")
print(mydata)
輸出結(jié)果
#output 1
Name Company Sale2013 Sale2014
蘋果 Apple 5000 5050
谷歌 Google 3500 3800
臉書 Facebook 2300 2900
亞馬遜 Amozon 2100 2500
騰訊 Tencent 3100 3300
#output 2
Name Company Year Sale
蘋果 Apple Sale2013 5000
谷歌 Google Sale2013 3500
臉書 Facebook Sale2013 2300
亞馬遜 Amozon Sale2013 2100
騰訊 Tencent Sale2013 3100
蘋果 Apple Sale2014 5050
谷歌 Google Sale2014 3800
臉書 Facebook Sale2014 2900
亞馬遜 Amozon Sale2014 2500
騰訊 Tencent Sale2014 3300
4.重塑數(shù)據(jù)——————cast函數(shù)
cast函數(shù)的作用于melt函數(shù)相反牡肉,可以將單列數(shù)據(jù)轉(zhuǎn)化為多列數(shù)據(jù),按輸出結(jié)果為向量,矩陣等采用acast淆九;輸出結(jié)果為data frames采用dcast
#function-1
dcast(data, formula, drop = TRUE,value.var = guess_value(data))
#function-2
acast(data, formula, drop = TRUE,value.var = guess_value(data))
10.函數(shù)
1.定義函數(shù)
function_name <- function(arg_1, arg_2, ...) {
Function body
}
2.函數(shù)示例
# Create a function to print squares of numbers in sequence.
new.function <- function(a) {
for(i in 1:a) {
b <- i^2
print(b)
}
}
# Call the function new.function supplying 6 as an argument.
new.function(6)