一.安裝
按照自己的電腦的版本進(jìn)行下載即可死讹。
二. 小試牛刀
我用的mac岂却,打開(kāi)命令終端,輸入R即可進(jìn)入到對(duì)應(yīng)的R語(yǔ)言終端進(jìn)行編碼。下面重點(diǎn)說(shuō)一下基本的R語(yǔ)言的命令
2.1 數(shù)學(xué)運(yùn)算和向量
- 命令提示:兩個(gè)問(wèn)號(hào)+關(guān)鍵詞
??plotting
上面這條命令就查看了關(guān)于畫(huà)圖的所有的命令
- 命令查看:問(wèn)號(hào)+雙引號(hào)(引號(hào)中間是要查詢的命令)
?"mean"
上面這條命令就查看了mean這個(gè)函數(shù)的作用
用q退出查看情況
- 查看范例:example(命令)q
example(plot)
4.下面是一些科學(xué)計(jì)算的命令捂龄,統(tǒng)一介紹
+ - * / #最簡(jiǎn)單的加減乘除
通過(guò)冒號(hào)運(yùn)算符創(chuàng)建一個(gè)從某個(gè)數(shù)值開(kāi)始到另一個(gè)數(shù)值結(jié)束的序列
通過(guò)c函數(shù)可以將產(chǎn)生的序列鏈接到一起
1:5
c(1:5)
1:5+1:5
注意盡量使用向量化參數(shù)释涛,盡量少使用for函數(shù)
sum(1:5) 計(jì)算加和
median(1:5) 計(jì)算中位數(shù)
需要注意一個(gè)事情,在很多情況下倦沧,要處理的參數(shù)是統(tǒng)一作為向量進(jìn)行處理的唇撬,所以如下兩個(gè)命令結(jié)果是不一樣的
median(1,2,3)
median(c(1,2,3))
前者結(jié)果是1,后者結(jié)果是2展融,原因在于median的參數(shù)的具體定義是
median(x,na.rm=False,...)
如果是第一種窖认,那么我們的數(shù)據(jù)x僅僅是1,2對(duì)應(yīng)na.rm,3對(duì)應(yīng)后面的可變變量愈污。
如果是第二種耀态,那么123對(duì)應(yīng)于我們要處理的X
所以一定要注意,我們函數(shù)的接收對(duì)象是向量暂雹,而不是單純的單值
c(1,2,3,4)-2 #向量的每個(gè)元素都會(huì)減去2
-2:2*-2:2 # 對(duì)應(yīng)位置會(huì)相乘
-2:2*-2:7 # 長(zhǎng)的對(duì)象長(zhǎng)度要是短的對(duì)象長(zhǎng)度的整數(shù)倍
(1:3)^2 # 乘方
1:10 / 3 # 除法
1:10 %% 3 # 取余數(shù)
sin(pi/4)
sin(c(pi/4,pi/2)) #sin cos tan asin acos atan log exp 等
比較符號(hào)
== > < >= <= !=
比較符號(hào)也可以向量化
c(1,2,3) == 2
exp(1:5) <=100
但是由于計(jì)算機(jī)內(nèi)部存儲(chǔ)數(shù)據(jù)的問(wèn)題
sqrt(2)^2 == 2 # 結(jié)果是false
所以R語(yǔ)言專門(mén)提供了一個(gè)all.equal函數(shù),它提供了一個(gè)容忍度首装,當(dāng)小于那個(gè)容忍度的時(shí)候誤差將會(huì)被忽略
all.equal(sqrt(2)^2,2)
2.2 變量賦值
# 下面兩種賦值方式都可以,書(shū)上推薦第一種杭跪,但是我比較喜歡第二種
x <- 1:5
y = 1:5
c <<- 3 #設(shè)置全局變量
2.3 特殊數(shù)字
- Inf:正無(wú)窮
- -Inf:負(fù)無(wú)窮
- NaN:不是一個(gè)數(shù)字(not a number)仙逻,意味著我們的計(jì)算沒(méi)有意義或者無(wú)法正確執(zhí)行
- NA:不可用(not available)并代表缺失值
Inf+1
Inf-1
Inf-Inf
1/Inf
Inf/1
Inf/Inf
log(inf)
NA+1
NA+Inf
NA*5
可以通過(guò)函數(shù)來(lái)進(jìn)行判斷,NaN和NA既不是有限值也不是無(wú)限值,NaN代表缺失值
x <- c(0,Inf,-Inf,NaN,NA)
is.nan(x)
is
.na(x)
is.infinite(x)
is.finite(x)
2.4 邏輯向量
! 非
& 與
| 或
三. 初窺門(mén)徑
3.1 查看判斷數(shù)據(jù)類型
# 數(shù)字類型就以下三類
class(1:3) # integer 整型
class(6) # numeric 浮點(diǎn)型
class(2.3) # numberic
class(3+1i) # complex 復(fù)數(shù)
# 字符型
class("hello") # character
# 布爾型
class(FALSE) TRUE # logical
查看系統(tǒng)中對(duì)于類型的判斷
ls(pattern = "^is",baseenv())
is.numeric(1) # 判斷1是不是浮點(diǎn)型
is.logical(FALSE)
is.integer(1:3)
打印出數(shù)據(jù)方便檢查變量涧尿,尤其是通過(guò)終端進(jìn)行代碼編寫(xiě)的時(shí)候
x <- 1:3
print(x)
數(shù)據(jù)的檢視
num <- runif(30) #加載數(shù)據(jù)或者產(chǎn)生數(shù)據(jù):產(chǎn)生30個(gè)0到1之間均勻分布的隨機(jī)數(shù)
summary(num) # 數(shù)據(jù)總體情況
head(num) # 前幾行數(shù)據(jù)
str(num) # 顯示對(duì)象結(jié)構(gòu)
3.2 向量
vector 函數(shù)可以創(chuàng)建一個(gè)指定類型和長(zhǎng)度的矢量系奉,其中的值可以是0,F(xiàn)ALSE姑廉,空字符串缺亮,或者nothing
vector("numeric",5)
vector("complex",2)
vector("logical",3)
vector("character",5)
seq.int可以創(chuàng)建一個(gè)序列,序列的范圍可以由兩個(gè)數(shù)字指定
seq.int(1,3) #等價(jià)于1:3
seq.int(1,10,3) # 1桥言,4萌踱,7,10 最后一個(gè)是步長(zhǎng)
seq_len(3) #1,2,3
seq_len(0) # integer(0)
獲得序列長(zhǎng)度
length(1:5)
x<-1:6
length(x)
可以給R向量的每一個(gè)元素命名
# 可以在初始化的時(shí)候進(jìn)行命名
x <- c(apple=1,banana=2,3)
x
x[1]
class(x) # numeric
# 也可以在向量創(chuàng)建之后用names函數(shù)為元素添加名字
x <- 1:3
names(x)<-("a","b","")
snames(x)
x
部分元素獲群虐ⅰ:切片slice
x<-1:5
x[c(1,3,5)] #正數(shù)序列:得到對(duì)應(yīng)位置元素
x[c(-2,-4)] #負(fù)數(shù)并鸵,要去掉當(dāng)前位置的元素
x[c(TRUE,FALSE,TRUE,FALSE,TRUE)] # 對(duì)應(yīng)True得到,反之去掉扔涧。
x[seq.int(2,4)]
x[seq.int(4,2)]
x[seq.int(1,5,2)]
當(dāng)不同長(zhǎng)度的向量配合運(yùn)算的時(shí)候园担,短的向量會(huì)配合長(zhǎng)的向量。
1:5+1
1:3+1:6 # 2,4,6,5,7,9 實(shí)際上1:3重復(fù)了兩次
但是這種情況不利于代碼的閱讀
rep(1:3,2) # 1:3 重復(fù)兩次
rep(1:3,each =2) # 每個(gè)元素重復(fù)兩次
rep(1:3,times=1:3) # 對(duì)應(yīng)位置元素重復(fù)time次
rep(1:3,length.out = 5) # 重復(fù)直到達(dá)到對(duì)應(yīng)的長(zhǎng)度
3.3 矩陣 數(shù)組
# 數(shù)組
x <- array(1:12,c(3,4))
x[1,] # 查看第一行
x[,1] # 查看第一列
dim(x) #查看維度
#矩陣
y <- matrix(1:12,nrow = 4)
y
y[1,]
y[,1]
dim(y)
nrow(y)
ncol(y)
3.4 控制流
# if語(yǔ)句
if(TRUE) print("yes")
# if esle
x<-7
if(x>10){
print("x>10")
}else{
print("x<=10")
}
# if-else if-else
x<-7
if(x>10){
print("x>10")
}else if(x>5){
print("x>5")
}else{
print("x<=5")
}
# for循環(huán)
for(i in 1:10)
print(i)
# while 循環(huán)
i<-0
while(i<10){
print(i)
i=i+1
}
四. 登堂入室
4.1 讀取數(shù)據(jù)
- 讀取R語(yǔ)言內(nèi)置的數(shù)據(jù)
data() #查看所有的數(shù)據(jù)文件枯夜,
# 直接使用名字即可加載弯汰,這里以BOD為例進(jìn)行講解
BOD #全部展示數(shù)據(jù)
head(BOD) #前幾條數(shù)據(jù)
summary(BOD) #簡(jiǎn)單的數(shù)據(jù)分析
- 讀取CSV文件
x <- read.csv(file="/Users/liqingwen/workplace/Rspace/mdata/test.csv",header=TRUE)
x
head(x)
summary(x)
dim(x)
rownames(x)
colnames(x)
x[1:3,] #前三行
x[,2] # 第2列
# 寫(xiě)數(shù)據(jù)到csv文件中,
write.csv(x=mdata, file="stu_bak.csv", row.names=F, quote=F)
- 讀取excel文件
另存為csv文件湖雹,然后用第一種方式來(lái)處理蝙泼。
4.2 處理數(shù)據(jù)
- 添加新列
# 添加新的一列,數(shù)據(jù)為91:95
x$grades <- 91:95
# 添加新的一列劝枣,
x$grade1<-x$grade+1
- 刪除新列
# 不顯示第二列
x[,-2]
# 去掉第一行
x[-1,]
之后用到其他地方的話汤踏,繼續(xù)更新织鲸。