當前位置:成語大全網 - 書法字典 - R中的列表和數據框有什麽區別?

R中的列表和數據框有什麽區別?

r語言列表:

是vector的壹般形式,沒有必要確保其中的所有元素都是同壹類型的,並且其中的元素通常是vector和lists本身。

數據幀(數據幀):

Data Frame壹般翻譯成數據框,感覺像R中的表格,由行和列組成。與列表不同,每列可以是不同的數據類型,而列表必須是相同的。

數據框的每壹列都有壹個列名,還可以為每壹行指定壹個行名。如果不指定行名,那麽它是壹個從1開始的序列來標識每壹行。

初始化

您可以使用data.frame函數初始化數據框。例如,如果我們想要初始化壹個學生的數據框,其中包含ID和姓名以及性別和出生日期,則代碼為:

學生& lt-data . frame(ID = c(11,12,13),Name = c(“Devin“,“Edward“,“李文“),Gender = c(“M“,“M“,“F“),birth date = c(“1984-12-29“,“1983-5-6“,“6

此外,還可以使用read . table()read . CSV()讀取文本文件,並返回數據框對象。讀取數據庫也會返回壹個數據框對象。

按如下方式查看學生的內容:

身份證姓名性別出生日期

1 11 Devin M 1984-12-29

2 12愛德華M 1983-5-6

李文F 1986-8-8

這裏只指定了列名,如ID、姓名、性別和生日。您可以使用names函數查看列名。如果要查看行名,需要使用row.names函數。這裏我們想使用ID作為行名,所以我們可以這樣寫:

row . names(student)& lt;-學生$ID

壹種更簡單的方法是讓參數row.names在初始化date.frame時設置行名的向量。

存取元件

像矩陣壹樣,使用

使用列索引或列名選擇要訪問的列。例如,如果您想要ID和姓名,代碼是:

idname & lt-學生【1:2】

也許

idname & lt-學生【c(“ID“,“Name“)】

如果只訪問壹列並返回向量類型,可以使用【【或$來訪問它。例如,我們需要所有學生的姓名,代碼是:

名稱& lt-學生【【2】】或姓名

使用attach和detach函數可以使訪問列時不必總是遵循變量名。

例如,要打印所有姓名,您可以寫:

附加(學生)

打印(姓名)

分離(學生)

您還可以以更簡單的方式使用with函數:

與(學生,{

n & lt-名字

印刷

})

這裏的n的範圍只在大括號中。如果要在with函數中為全局變量賦值,需要使用

修改列數據類型

接下來,讓我們看看對象的每壹列的類型,並使用str(student)獲得以下結果:

‘data . frame‘:3個ob。4個變量:

$ ID : num 1 2 3

$ Name:因子w/ 3級別“Devin”、“Edward”,..: 1 2 3

$性別:因子w/ 2級別“F”、“M”:2 2 1

$ Birthdate:因子w/ 3級別“1983-5-6“,“1984-12-29“,..: 2 1 3

默認情況下,字符串向量被自動標識為Factor,即ID是數字類型,其他三列被定義為Factor類型。顯然,這裏的姓名應該是字符串類型,生日應該是日期類型。我們需要更改列的數據類型:

學生$ Name & lt-as.character(學生$姓名)

學生$生日& lt-作為。日期(學生$生日)

讓我們再次運行str(student)來查看修改後的結果:

‘data . frame’:3個ob。4個變量:

$ ID:編號11 12 13

$ Name:克裏斯“迪文”“愛德華”“李文”

$性別:因子w/ 2級別“F”、“M”:2 2 1

$ Birthdate:日期,格式:“1984-12-29““1983-05-06““1986-08-08“

添加新列

對於現有的學生對象,我們希望添加根據出生日期計算的年齡列。妳首先需要知道如何計算妳的年齡。我們可以使用日期函數Sys。Date()獲取當前日期,然後使用format函數獲取年份,然後將這兩年相減以獲取年齡。似乎R沒有提供幾個有用的日期函數,所以我們只能使用format函數取出年份部分,然後將其轉換為int類型的減法。

學生$年齡& lt-as.integer(格式(Sys。Date(),“%Y“)-as . integer(格式(student$Birthdate,“% Y“))

這樣寫似乎太長了。我們可以使用within函數,它類似於前面提到的with函數,並且可以省略變量名。不同的是,within函數可以修改其中的變量,也就是說,我們在這裏添加了年齡列:

學生& lt-在(學生,{

年齡& lt-as.integer(格式(Sys。Date(),“%Y“)-as . integer(格式(生日,“% Y“))

})

查詢/子集

查詢日期範圍並返回滿足條件的子集相當於數據庫中的表查詢,這是非常常見的操作。如前所述,使用行和列的索引來獲取子集是最簡單的方法。如果我們將布爾向量與哪個函數壹起使用,我們可以過濾行。例如,如果我們要查詢性別為F的所有數據,那麽我們首先獲得壹個布爾向量“student $ Gender = =“F =“F”:FALSE FALSE TRUE,然後使用哪個函數返回布爾向量中的TRUE索引,因此我們完整的查詢語句為:

學生【which(student $ Gender = =“F“),】

請註意,此處列出的索引未輸入。如果我們只想知道所有女孩的年齡,我們可以將其改為:

學生【which(student $ Gender = =“F“),“年齡“】

這種查詢的編寫仍然有點復雜。可以直接使用subset函數,這樣查詢會更簡單。例如,我們將查詢條件更改為年齡

subset(學生,性別= =“F“& amp;年齡& lt30,select=c(“姓名“,“年齡“)