【R語(yǔ)言學(xué)習(xí)系列1】- 基礎(chǔ)篇

一.安裝

按照自己的電腦的版本進(jìn)行下載即可死讹。

  1. R語(yǔ)言安裝包
  2. R語(yǔ)言IDE:Rstudio

二. 小試牛刀

我用的mac岂却,打開(kāi)命令終端,輸入R即可進(jìn)入到對(duì)應(yīng)的R語(yǔ)言終端進(jìn)行編碼。下面重點(diǎn)說(shuō)一下基本的R語(yǔ)言的命令

2.1 數(shù)學(xué)運(yùn)算和向量

  1. 命令提示:兩個(gè)問(wèn)號(hào)+關(guān)鍵詞
??plotting

上面這條命令就查看了關(guān)于畫(huà)圖的所有的命令

  1. 命令查看:問(wèn)號(hào)+雙引號(hào)(引號(hào)中間是要查詢的命令)
?"mean"

上面這條命令就查看了mean這個(gè)函數(shù)的作用
用q退出查看情況

  1. 查看范例: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ù)字

  1. Inf:正無(wú)窮
  2. -Inf:負(fù)無(wú)窮
  3. NaN:不是一個(gè)數(shù)字(not a number)仙逻,意味著我們的計(jì)算沒(méi)有意義或者無(wú)法正確執(zhí)行
  4. 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ù)

  1. 讀取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ù)分析
  1. 讀取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)
  1. 讀取excel文件
另存為csv文件湖雹,然后用第一種方式來(lái)處理蝙泼。

4.2 處理數(shù)據(jù)

  1. 添加新列
# 添加新的一列,數(shù)據(jù)為91:95
x$grades <- 91:95
# 添加新的一列劝枣,
x$grade1<-x$grade+1
  1. 刪除新列
# 不顯示第二列
x[,-2]
# 去掉第一行
x[-1,]

之后用到其他地方的話汤踏,繼續(xù)更新织鲸。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市溪胶,隨后出現(xiàn)的幾起案子搂擦,更是在濱河造成了極大的恐慌,老刑警劉巖哗脖,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瀑踢,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡才避,警方通過(guò)查閱死者的電腦和手機(jī)橱夭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)桑逝,“玉大人棘劣,你說(shuō)我怎么就攤上這事±愣簦” “怎么了茬暇?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)寡喝。 經(jīng)常有香客問(wèn)我糙俗,道長(zhǎng),這世上最難降的妖魔是什么预鬓? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任巧骚,我火速辦了婚禮,結(jié)果婚禮上格二,老公的妹妹穿的比我還像新娘网缝。我一直安慰自己,他們只是感情好蟋定,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著草添,像睡著了一般驶兜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上远寸,一...
    開(kāi)封第一講書(shū)人閱讀 51,554評(píng)論 1 305
  • 那天抄淑,我揣著相機(jī)與錄音,去河邊找鬼驰后。 笑死肆资,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的灶芝。 我是一名探鬼主播郑原,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼唉韭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了犯犁?” 一聲冷哼從身側(cè)響起属愤,我...
    開(kāi)封第一講書(shū)人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎酸役,沒(méi)想到半個(gè)月后住诸,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡涣澡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年贱呐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片入桂。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖事格,靈堂內(nèi)的尸體忽然破棺而出惕艳,到底是詐尸還是另有隱情,我是刑警寧澤驹愚,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布远搪,位于F島的核電站,受9級(jí)特大地震影響逢捺,放射性物質(zhì)發(fā)生泄漏谁鳍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一劫瞳、第九天 我趴在偏房一處隱蔽的房頂上張望倘潜。 院中可真熱鬧,春花似錦志于、人聲如沸涮因。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)养泡。三九已至,卻和暖如春奈应,著一層夾襖步出監(jiān)牢的瞬間澜掩,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工杖挣, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肩榕,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓惩妇,卻偏偏與公主長(zhǎng)得像株汉,于是被迫代替她去往敵國(guó)和親筐乳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容