(1)常見的數(shù)據(jù)類型
在R中处窥,常見的數(shù)據(jù)類型一共有5種:
字符型character,
數(shù)值型numeric,
整形integer,
復(fù)數(shù)型complex,
邏輯型logical
還需要注意的是铺呵,如果我們直接輸入1,2,3,4...得到的是numeric類型。如果想要輸入integer類型野揪,需要輸入1L,2L,3L,4L...
Inf表示無窮大昵观,-Inf表示無窮小绸罗。
同理1/0表示無窮大,-1/0表示無窮小
如果輸入0/0則會得到Nan這樣的顯示驶兜,Nan表示在計算的時候出現(xiàn)錯誤。
而如果出現(xiàn)Na則表示缺失值远寸。我們可以認(rèn)為Na包含了NaN抄淑。
(2)數(shù)據(jù)的結(jié)構(gòu)
在R語言中,常見的數(shù)據(jù)的結(jié)構(gòu)有以下幾種:
向量驰后,列表肆资,矩陣,數(shù)組倡怎,數(shù)據(jù)框迅耘,因子
1、向量
特點:相同類型监署,序列
如何創(chuàng)建向量颤专?
1、創(chuàng)建初始向量:vector(‘?dāng)?shù)據(jù)類型’钠乏,數(shù)據(jù)個數(shù))栖秕,例如,我們輸入:x<-vector('numeric',10)晓避,可以得到如下結(jié)果簇捍,可以看到x的類型為數(shù)值型numeric只壳。
2、用vector其實等同于直接用數(shù)據(jù)類型后面跟數(shù)據(jù)個數(shù)暑塑,上面的例子其實就可以寫成numeric(10)吼句,運行之后可以得到相同的結(jié)果:
3、如果需要創(chuàng)建的向量是等差為1的等差數(shù)列事格,如1到20的數(shù)列惕艳,我們可以直接寫成:
1:20
4、更多情況下驹愚,我們用c()函數(shù)用來創(chuàng)建向量远搪,把數(shù)據(jù)對象連結(jié)在一起(concatenate)
例如:
c(1,2)
如上圖可見,這里的數(shù)據(jù)類型class顯示的是“numeric”逢捺,說明c(1,2)生成的向量里面的數(shù)據(jù)類型是數(shù)值型谁鳍,而非整形integer。如果想要得到整形的向量劫瞳,我們需要輸入:
c(1L,2L)
如果輸入c(TRUE,FALSE,FALSE,TRUE)倘潜,得到邏輯型向量
如果輸入c('初中','高中','大學(xué)')柠新,得到文本型向量
注意
就像我們之前提到的窍荧,向量里面必須得是相同類型的數(shù)據(jù)。如果在創(chuàng)建向量的時候恨憎,輸入了不同類型的數(shù)據(jù)蕊退,R會強制將不同類型的數(shù)據(jù)轉(zhuǎn)換成相同的數(shù)據(jù)類型。
例如憔恳,輸入c(1.7,'a')瓤荔,最后生成的結(jié)果如圖,1.7被轉(zhuǎn)成了字符型钥组,我們也可以從class里面看到類型是字符型character输硝。
輸入c(T,2),最后生成的結(jié)果如圖程梦,T由邏輯型轉(zhuǎn)成了數(shù)值型点把。
輸入c("a",T),得到的結(jié)果如圖所示,T由邏輯型轉(zhuǎn)成了字符型屿附。
上面提到的這幾種轉(zhuǎn)換郎逃,通常都是R強制地悄悄地執(zhí)行的。如果我們自己想要轉(zhuǎn)換數(shù)據(jù)類型挺份,則應(yīng)該應(yīng)用:
as.numeric/logical/character/complex(向量名)來進(jìn)行轉(zhuǎn)換褒翰。
2、列表
特點:列表和向量相同的地方在于,二者都是序列优训;不同的地方在于朵你,列表是由不同類型的對象組成的,而向量則由同樣類型的數(shù)據(jù)組成揣非。
寫作:list(name1=object1,name2=object2,…)
例如:輸入x<-list(1,'a',T,b=c(1+4i,2-3i))抡医,我們可以明顯看到list()里面的每個部分類型都不同(數(shù)值,字符妆兑,邏輯值魂拦,向量),輸出結(jié)果如圖:
3搁嗓、矩陣
是一類特殊向量,維度屬性。
matrix(數(shù)據(jù), nrow = 幾行, ncol = 幾列, byrow = FALSE/T是否按行排列, dimnames = list(c(行名)箱靴,c(列名)))
斜體的部分表示可以不寫腺逛。
例如,我們想要輸入1-8衡怀,2行棍矛,4列,按照行排列抛杨,行名為張三够委、王五,列名為吃喝玩樂怖现∽旅保可以得到如下圖:
matrix(1:8,2,4,byrow=T,dimnames = list(c('張三','王五'),c('吃','喝','玩','樂')))
矩陣還有另外一種方法可以創(chuàng)建,用cbind() rbind()創(chuàng)建
例如有x,y兩個向量屈嗤。cbind()是按照列來連接xy(x一列潘拨,y一列);rbind是按照行連接xy(x一行,y一行)
注意:如果用rbind()來合并矩陣或者向量或者表格饶号,必須要求二者列名一致
矩陣還有另外一種方法可以創(chuàng)建铁追,創(chuàng)建一個向量,而后添加維度
t()表示矩陣的轉(zhuǎn)置
4茫船、數(shù)組
array琅束,和matrix最大的區(qū)別在于array的維度更多,有三個維度算谈。
我們可以理解為matrix有行涩禀、列兩個維度;但是array多了一個面板維度(分成幾塊)濒生。
array(數(shù)據(jù),dim=c(幾行,幾列,幾塊),dimnames = list(c(行名),c(列名),c(板塊名)))
例如:
array(1:12,dim=c(2,3,2),dimnames=list(c('從前','現(xiàn)在'),c('衣','食','行'),c('北京','上海')))
得到如下結(jié)果:
5埋泵、數(shù)據(jù)框
數(shù)據(jù)框是R的一個重要數(shù)據(jù)類型,用來存儲表格數(shù)據(jù)。可認(rèn)為是特殊類型的列表,列表中每個元素(每類)都有同樣的長度丽声。每一列可以是不同的類型(矩陣是相同的)礁蔗。可以通過調(diào)用data.matrix()將數(shù)據(jù)框轉(zhuǎn)化為矩陣雁社。
數(shù)據(jù)框很像我們在使用SQL的時候來定義表格之后浴井,給表格中的各列賦值的情況。
data.frame(列1=向量,列2=向量)
例如:data.frame(foo=1:4,bar=c(T,T,F,F))
nrow(x)----x有幾行
ncol(x)----x有幾列
6霉撵、因子(factor磺浙,gl)
特點:用于創(chuàng)建分類數(shù)據(jù),兩種類型:有序/無序。
可以寫成這樣的形式:
factor(c("第一類","第二類","第三類",...),levels=c("第一類","第二類","第三類"),ordered = T)
ordered默認(rèn)為F徒坡。
例如:factor(c("小學(xué)","初中","高中","小學(xué)"),levels=c("小學(xué)","初中","高中"),ordered = T)
得到如下結(jié)果:
我們?nèi)绻粚evel進(jìn)行定義撕氧,出現(xiàn)如下結(jié)果:
此時雖然有比較,但是初中<高中<小學(xué)喇完,這樣的結(jié)果是根據(jù)字母發(fā)音排序的結(jié)果伦泥,或許并不是我們想要的,所以如果我們對排序有要求锦溪,還是要對levels進(jìn)行定義不脯。levels=c("第一類","第二類","第三類"),理解為
"第一類"<"第二類"<"第三類"
我們?nèi)绻粚rdered進(jìn)行定義刻诊,出現(xiàn)如下結(jié)果:
此時為無序數(shù)據(jù)防楷,無比較。
我們還有另外一種方法來定義因子:gl
gl(有幾類, 循環(huán)幾次, labels = c("第一類名稱", "第二類名稱"),ordered=T)
例如:gl(2,4)则涯,表示有兩個變量(2)复局,每一個循環(huán)4次
例如:gl(2, 8, labels = c("女", "男"),ordered=T),表示有兩個變量是整,各循環(huán)8次肖揣,這兩個變量分別表示為“女”和“男”,排序浮入。
注意龙优,這里和上一個例子一樣,本來應(yīng)該是給出兩個變量用1和2表示事秀,labels相當(dāng)于給1和2加了“女”和“男”的標(biāo)簽彤断。所以排序之后顯示“女”<“男”,其背后真實的情況是1<2 易迹。
例如: gl(2, 8, labels = c("女", "男"),ordered=T,length=32)宰衙,在以上的基礎(chǔ)上,規(guī)定一共有32個對象
結(jié)語
通過我們以上的論述睹欲,我們知道了5種數(shù)據(jù)類型和幾種常見的對象形態(tài)供炼。
這些是R中非骋晃荩基礎(chǔ)但是十分重要的內(nèi)容,需要多看幾遍才能記得更清楚袋哼。