《Learning R》筆記 Chapter 5 下 dataframe

dataframe是R的特色數(shù)據(jù)結(jié)構(gòu)之一。它相當(dāng)于matrix + list,因此二者的很多性質(zhì)也直接繼承了過來。

創(chuàng)建

dataframe創(chuàng)建的基本格式依然是 data.frame(col_names = col_values) , 這一點類似于list。如果不特異指定rownames的話,第一個含有names的column將成為這個df的命名者。但我們也可以用row.names(df) <- NULL 或 某vector來指定名稱或?qū)⒚Q清零。

由于繼承了matrix的性質(zhì),因此colnames() rownames() dimnames() ncol() nrow()這些函數(shù)也都適用于dataframe。而由于繼承了list的性質(zhì),length()和names()對于dataframe來說相當(dāng)于ncol()和colnames() .

在構(gòu)建dataframe時,不同的column可以長度不同,但要求很苛刻,實際使用時應(yīng)盡量避免。

索引

dataframe可以同時使用matrix和list風(fēng)格的索引。但索引的輸出結(jié)果要注意一下type:

> class(iris[1]) #輸出的依然是個dataframe
[1] "data.frame" #這里是list的語法
> class(iris[,1])
[1] "numeric"
> class(iris[[1]])
[1] "numeric"
> class(iris$Sepal.Length)
[1] "numeric"

subset()也能在dataframe中進(jìn)行篩選,輸出一個新的dataframe。它的基本格式是:

subset(
dataframe_name,
subset,#邏輯vector,用于篩選rows
select # 表達(dá)式,用于篩選columns
)

> subset(airquality, Day==1,select = Ozone:Wind) 
#也可以直接寫airquality, Day==1,Ozone:Wind
    Ozone Solar.R Wind
1      41     190  7.4
32     NA     286  8.6
62    135     269  4.1
93     39      83  6.9
124    96     167  6.9

操作

dataframe可以使用t()轉(zhuǎn)置。
rbind和cbind()也適用于dataframe。但rbind必須二者的names能夠一一對應(yīng),否則報錯。cbind則直接結(jié)合,但也要注意nrow是否一致。

> x=data.frame(x=1:3,y=2:4,z=3:5)
> y=data.frame(y=0:2,z=4:6,t=5:7)
> rbind(x,y)
Error in match.names(clabs, names(xi)) : 名字同原來已有的名字不相對
> p=data.frame(a=1:4,b=2:5,c=3:6)
> cbind(x,p)
Error in data.frame(..., check.names = FALSE) : 
  參數(shù)值意味著不同的行數(shù): 3, 4

R自帶的merge()能夠合并兩個dataframe。具體的語法可參考文檔。它的基本格式是:

> merge(df_x, df_y,
by.x = col_name_x , by.y = col_name_y , 
all = TRUE
) 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容