向量包括原子向量和列表,原子向量的所有元素必須具有相同的類型萍启,所以當(dāng)把不同的數(shù)據(jù)結(jié)合在一起形成向量時总珠,它們就會被強(qiáng)制轉(zhuǎn)換(轉(zhuǎn)換順序為由低到高
轉(zhuǎn)換,強(qiáng)制轉(zhuǎn)換經(jīng)常是自動進(jìn)行的)勘纯。
數(shù)據(jù)類型靈活性由低到高的排列順序為:
邏輯性<整形<雙精度型<字符型
eg:字符型和整形便會組成字符型
列表的元素可以是任意類型局服,甚至包括列表,使用list()來構(gòu)建
列表有時稱為遞歸向量驳遵,因為一個列表可以包含其他列表淫奔,這使其從根本上不同于原子向量。
c()可以把多個列表合并成一個列表堤结。如果原子向量和列表結(jié)合在一起唆迁,c()會強(qiáng)制將向量轉(zhuǎn)成列表,然后在將他們結(jié)合在一起竞穷。
再調(diào)用read.csv()函數(shù)時唐责,對na.strings參數(shù)進(jìn)行設(shè)置通常是個好辦法
因子型轉(zhuǎn)為數(shù)值型:先轉(zhuǎn)為字符型,再轉(zhuǎn)為數(shù)值型
因子型雖然看上去很像字符型向量来庭,但它其實是整形妒蔚。
read.csv("xxx.csv",na.strings=".")
data.frame構(gòu)建
data.frame屬于S3類穿挨,所以他的類型反映了構(gòu)建它的基礎(chǔ)向量:列表月弛。
可以使用data.frame來構(gòu)建數(shù)據(jù)框肴盏,但是data.frame()的默認(rèn)行為會把字符串轉(zhuǎn)換為因子,使用參數(shù)stringAsFactors=F
來禁止這種轉(zhuǎn)換
當(dāng)進(jìn)行行列向合并時帽衙,兩個數(shù)據(jù)框的行數(shù)必須保持一致菜皂,行的名字可以忽略,當(dāng)進(jìn)行行行合并的時候厉萝,列的名字和列數(shù)都必須一致恍飘。如果兩個數(shù)據(jù)框沒有相同的列,可以使用
plyr:rbind.fill()
進(jìn)行合并.
經(jīng)常以為使用cbind可以將向量合并到一起來創(chuàng)建數(shù)據(jù)框谴垫,這是錯誤的章母,因為cbind創(chuàng)建的是一個矩陣,除非其中有一個參數(shù)本身就是數(shù)據(jù)框
特殊列
由于數(shù)據(jù)框是一個向量列表翩剪,所以數(shù)據(jù)框也可能有一列是由列表組成的:
但是當(dāng)對列表使用data.frame()
,它會將列表中的每個元素放在自己的列中乳怎,所以便會報錯。使用I()
便可以避免這個錯誤前弯,它會使data.frame() 把列表看作一個單元(但是行數(shù)必須一致)蚪缀。
同樣數(shù)據(jù)框中的某一列也可以是矩陣或者數(shù)組,只要函數(shù)一致恕出。