數(shù)據(jù)框(Data frame)可以理解成我們常說的"表格"。
數(shù)據(jù)框是 R 語言的數(shù)據(jù)結(jié)構(gòu),是特殊的二維列表。
數(shù)據(jù)框每一列都有一個唯一的列名,長度都是相等的,同一列的數(shù)據(jù)類型需要一致,不同列的數(shù)據(jù)類型可以不一樣。
R 語言數(shù)據(jù)框使用 data.frame() 函數(shù)來創(chuàng)建,語法格式如下:
data.frame(…, row.names = NULL, check.rows = FALSE, check.names = TRUE, fix.empty.names = TRUE, stringsAsFactors = default.stringsAsFactors())
…: 列向量,可以是任何類型(字符型、數(shù)值型、邏輯型),一般以 tag = value 的形式表示,也可以是 value。
row.names: 行名,默認(rèn)為 NULL,可以設(shè)置為單個數(shù)字、字符串或字符串和數(shù)字的向量。
check.rows: 檢測行的名稱和長度是否一致。
check.names: 檢測數(shù)據(jù)框的變量名是否合法。
fix.empty.names: 設(shè)置未命名的參數(shù)是否自動設(shè)置名字。
stringsAsFactors: 布爾值,字符是否轉(zhuǎn)換為因子,factory-fresh 的默認(rèn)值是 TRUE,可以通過設(shè)置選項(stringsAsFactors=FALSE)來修改。
以下創(chuàng)建一個簡單的數(shù)據(jù)框,包含姓名、工號、月薪:
table = data.frame( 姓名 = c("張三", "李四"), 工號 = c("001","002"), 月薪 = c(1000, 2000) ) print(table) # 查看 table 數(shù)據(jù)
執(zhí)行以上代碼輸出結(jié)果為:
姓名 工號 月薪 1 張三 001 1000 2 李四 002 2000
數(shù)據(jù)框的數(shù)據(jù)結(jié)構(gòu)可以通過 str() 函數(shù)來展示:
table = data.frame( 姓名 = c("張三", "李四"), 工號 = c("001","002"), 月薪 = c(1000, 2000) ) # 獲取數(shù)據(jù)結(jié)構(gòu) str(table)
執(zhí)行以上代碼輸出結(jié)果為:
'data.frame': 2 obs. of 3 variables: $ 姓名: chr "張三" "李四" $ 工號: chr "001" "002" $ 月薪: num 1000 2000
summary() 可以顯示數(shù)據(jù)框的概要信息:
table = data.frame( 姓名 = c("張三", "李四"), 工號 = c("001","002"), 月薪 = c(1000, 2000) ) # 顯示概要 print(summary(table))
執(zhí)行以上代碼輸出結(jié)果為:
姓名 工號 月薪 Length:2 Length:2 Min. :1000 Class :character Class :character 1st Qu.:1250 Mode :character Mode :character Median :1500 Mean :1500 3rd Qu.:1750 Max. :2000
我們也可以提取指定的列:
table = data.frame( 姓名 = c("張三", "李四"), 工號 = c("001","002"), 月薪 = c(1000, 2000) ) # 提取指定的列 result <- data.frame(table$姓名,table$月薪) print(result)
執(zhí)行以上代碼輸出結(jié)果為:
table.姓名 table.月薪 1 張三 1000 2 李四 2000
以下形式顯示前面兩行:
table = data.frame( 姓名 = c("張三", "李四","王五"), 工號 = c("001","002","003"), 月薪 = c(1000, 2000,3000) ) print(table) # 提取前面兩行 print("---輸出前面兩行----") result <- table[1:2,] print(result)
執(zhí)行以上代碼輸出結(jié)果為:
姓名 工號 月薪 1 張三 001 1000 2 李四 002 2000 3 王五 003 3000 [1] "---輸出前面兩行----" 姓名 工號 月薪 1 張三 001 1000 2 李四 002 2000
我們可以通過類似坐標(biāo)的形式讀取指定行的某一列的數(shù)據(jù),以下我們讀取第 2 、3 行的第 1 、2 列數(shù)據(jù)::
table = data.frame( 姓名 = c("張三", "李四","王五"), 工號 = c("001","002","003"), 月薪 = c(1000, 2000,3000) ) # 讀取第 2 、3 行的第 1 、2 列數(shù)據(jù): result <- table[c(2,3),c(1,2)] print(result)
執(zhí)行以上代碼輸出結(jié)果為:
姓名 工號 2 李四 002 3 王五 003
我們可以對已有的數(shù)據(jù)框進(jìn)行擴展,以下示例我們添加部門列:
table = data.frame( 姓名 = c("張三", "李四","王五"), 工號 = c("001","002","003"), 月薪 = c(1000, 2000,3000) ) # 添加部門列 table$部門 <- c("運營","技術(shù)","編輯") print(table)
執(zhí)行以上代碼輸出結(jié)果為:
姓名 工號 月薪 部門 1 張三 001 1000 運營 2 李四 002 2000 技術(shù) 3 王五 003 3000 編輯
我們可以使用 cbind() 函數(shù)將多個向量合成一個數(shù)據(jù)框:
# 創(chuàng)建向量 sites <- c("Google","Nhooo","Taobao") likes <- c(222,111,123) url <- c("www.google.com","www.soo66.com","www.taobao.com") # 將向量組合成數(shù)據(jù)框 addresses <- cbind(sites,likes,url) # 查看數(shù)據(jù)框 print(addresses)
執(zhí)行以上代碼輸出結(jié)果為:
sites likes url [1,] "Google" "222" "www.google.com" [2,] "Nhooo" "111" "www.soo66.com" [3,] "Taobao" "123" "www.taobao.com"
如果要對兩個數(shù)據(jù)框進(jìn)行合并可以使用 rbind() 函數(shù):
table = data.frame( 姓名 = c("張三", "李四","王五"), 工號 = c("001","002","003"), 月薪 = c(1000, 2000,3000) ) newtable = data.frame( 姓名 = c("小明", "小白"), 工號 = c("101","102"), 月薪 = c(5000, 7000) ) # 合并兩個數(shù)據(jù)框 result <- rbind(table,newtable) print(result)
執(zhí)行以上代碼輸出結(jié)果為:
姓名 工號 月薪 1 張三 001 1000 2 李四 002 2000 3 王五 003 3000 4 小明 101 5000 5 小白 102 7000