是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(“姓名“,“年齡“)