
R語言數(shù)據(jù)對象與運算
R語言數(shù)據(jù)對象與運算 筆記整理
2.1 數(shù)據(jù)對象及類型
R語言創(chuàng)建和控制的實體被稱為對象(object)
ls()命令來查看當前系統(tǒng)里的數(shù)據(jù)對象
R對象的名稱必須以一個英文字母打頭,并由一串大小寫字母、數(shù)字或鐘點組成
注意:R區(qū)分大小寫
不要用R的內(nèi)置函數(shù)名稱作為數(shù)據(jù)對象的名稱,如c、length等
2.2 數(shù)據(jù)對象類型
R語言的對象包括
數(shù)值型(numeric):實數(shù), 可寫成整數(shù)(integers)、小數(shù)(decimal fractions)、科學記數(shù)(scientific notation)
邏輯型(logical):T(true)或F(FALSE)
字符型(character):夾在" "或' '之間
復數(shù)型(complex):形如a+bi
原味型(raw):以二進制形式保存數(shù)據(jù)
缺省型(missing value):有些統(tǒng)計資料是不完整的,當一個元素或值在統(tǒng)計的時候是“不可得到(not available)”或“缺失值(missing value)”的時候,相關位置可能會被保留并賦予一個特定的NA(not available)值,任何NA的運算結(jié)果都是NA。
辨別和轉(zhuǎn)換數(shù)據(jù)對象類型的函數(shù):
辨別 轉(zhuǎn)換
character is.character() as,character()
complex
double
integer
logical
NA
numeric
2.3 數(shù)據(jù)對象構(gòu)造
R語言里的數(shù)據(jù)對象主要有六種構(gòu)造:向量(vector)、矩陣(matrix)、數(shù)組(array)、列表(list)、數(shù)據(jù)框(data frames)、因子(factor)
2.3.1 向量(vector)是由有相同基本類型元素組成的序列,相當于一維數(shù)組
5個數(shù)值組成的向量x,這是一個用函數(shù)c()完成的賦值語句,這里c()可以有任意多個參數(shù),而它輸出的值則是一個把這些參數(shù)首尾相連形成的一個向量
R的賦值符號除了“<-”外,還有"->""="
例如:
> c(1,3,5,7,9) -> y
> y
[1] 2 5 8 3
> z = c(1,3,5,7,9)
> z
[1] 1 3 5 7 9
assign()函數(shù)對向量進行賦值
length():可返回向量的長度
mode()可返回向量的數(shù)據(jù)類型
正則序列 用 “:”符號,可產(chǎn)生有規(guī)律的正則序列(: 的運算級別最高)
函數(shù)seq()產(chǎn)生有規(guī)律的各種序列
seq(from,to ,by) from 給序列的起始值,to表示序列的終止值,by表示步長(by 省略時,表示步長值為1)
> seq(1,10,2)
[1] 1 3 5 7 9
> seq(1,10)
[1] 1 2 3 4 5 6 7 8 9 10
有時關注的是數(shù)列的長度,利用句法:seq(下界,by=,length=)
> seq(1,by=2,length=10)
[1] 1 3 5 7 9 11 13 15 17 19
rep(x,times,……)x表示要重復的對象,times表示重復的次數(shù)
> rep(c(1,3),4)
[1] 1 3 1 3 1 3 1 3
> rep(c(1,3),each=4)
[1] 1 1 1 1 3 3 3 3
對每個元素進行重復;
R中的內(nèi)置函數(shù):
mean()來示向量的均值
median()求是位數(shù)
var()求方差
sd()求標準差
sort()對向量排序
rev()將向量按原方向的反方向排列
rank()給求出向量的秩
prod()求向量連乘積
append()為向量添加元素
對向量運算常見函數(shù)表
函數(shù) 用途
sum() 求和
max() 求最大值
min() 求最小值
range() 求極差(全矩)
mean() 求均值
median 求中位數(shù)
var() 求方差
sd() 求標準差
sort() 排序
rev() 反排序
rank() 求秩
append() 添加
replace() 替換
match() 匹配
pmatch() 部分匹配
all() 判斷所有
any() 判斷部分
prod() 積
2.3.2 矩陣
矩陣(matrix)是將數(shù)據(jù)用行和列排列的長方形表格,它是二維的數(shù)組,其單元必須是相同的數(shù)據(jù)類型,通常用列來表示不同的變量,用行表示各個對象。
其句法是:
matrix(data=NA,ncol=1,byrow-=FALSE,dimnames=NULL)
data是必須的,其它幾個選擇參數(shù)。
nrow表示矩陣的行數(shù)
ncol表示矩陣的列數(shù)
byrow默認為FALSE,表示矩陣按列排列,如設置為T,表示按行排列;
dimnames可更改矩陣行列名字
diag()函數(shù)生成對角矩陣
diag()這個函數(shù)比較特別,當數(shù)據(jù)是向量時則生成對角矩陣,但當數(shù)據(jù)是矩陣時,則返回對角元素
也可用函數(shù)diag()生成單位矩陣
當我們生成了某個矩陣后,若要訪問矩陣的某個元素或某行(列),可以利用形如A[i,j]的形式得到相應的索引矩陣
矩陣可進行相應的加減乘除運算,但運算過程中要注意行數(shù)和列數(shù)的限制條件
R里A*B并不是表示矩陣相乘,只表示矩陣對應的元素相乘
矩陣相乘應用A%*%B
dim()返回矩陣的行數(shù)和列數(shù)
nrow()返回矩陣的行數(shù)
ncol()返回矩陣的列數(shù)
solve()返回矩陣的逆矩陣
對矩陣運算的常見函數(shù)
函數(shù) 用途
as.matrix() 把非矩陣的轉(zhuǎn)換成矩陣
is.matrix() 辨別是否矩陣
diag() 返回對角元素或生成對角矩陣
eigen() 求特征值和特征向量
solve() 求逆矩陣
chol() Choleski分解
svd() 奇異值分解
qr() QR分解
det() 求行列式
dim() 返回行列數(shù)
t() 矩陣轉(zhuǎn)置
apply() 對矩陣應用函數(shù)
R語言還提供了專門針對矩陣的行或列計算的函數(shù)
如 colSUms()對矩陣各列求和 colMeans()求矩陣各列的均值
類似的有 rowSums()rowMeans()
更一般的方法:
apply()函數(shù)來對各行各列進行運算
句法是:apply(X,MARGIN,FUN,……)
X表示要處理的數(shù)據(jù)
MARGIN表示函數(shù)作用的范圍
取1表示對行運用函數(shù)
取2表示對列運用函數(shù)
FUN表示要運用的函數(shù)
rbind()、cbind()將兩個或兩個以上的矩陣合并起來
rbind()表示按行合并,cbind()則表示按列合并
2.3.3 數(shù)組
數(shù)組(array)可以看作是帶有多個下標的類型相同的元素的集合。
數(shù)組的生成函數(shù)是array(),其句法是
array(data=NA,dim=length(data),dimnames-NULL)
data表示數(shù)據(jù),可以為空
dim 表示維數(shù)
dimnames可以更改數(shù)組難度的名稱
2.3.4 列表
向量、矩陣和的單元必須是同一類型的數(shù)據(jù),若一個數(shù)據(jù)對象需要含有不同的數(shù)據(jù)類型,可采用列表(list)這種數(shù)據(jù)對象的形式。
列表是一個對象的有序集合構(gòu)成的對象,列表中包含的對象又稱為它的分量(components),分量可以是不同的模式或(和)類型
語法式為:list (變量1=分量1,變量2=分量2,……)
若要訪問列表的某一成分,可以用LST[[1]],LST[[2]]的形式訪問
因分量可以被命名,故可以在列表名稱后加$符號,再寫上成分名稱來訪問列表分量
函數(shù)length()、mode()、names()可以分別返回列表的長度(分量的數(shù)目)、數(shù)據(jù)類型、列表里成分的名字
2.3.5 數(shù)據(jù)框
數(shù)據(jù)框(data frame)是一種矩陣形式的數(shù)據(jù),但數(shù)據(jù)框中各列可以是不同類型的數(shù)據(jù)。數(shù)據(jù)框每列是一個變量,每行是一個觀測 。
對可能列入數(shù)據(jù)框中的列表有如下的一些限制:
1.分量必須是向量(數(shù)值,字符,邏輯),因子,數(shù)值矩陣,列表或者其他數(shù)據(jù)框。
2.矩陣,列表和數(shù)據(jù)框為新的數(shù)據(jù)框提供了盡可能多的變量,因為它們各自擁有列、元素或者變量。
3.數(shù)值向量、邏輯值、因子保持原有格式,而字符向量會被強制轉(zhuǎn)換成因子并且它的水平就是向量中出現(xiàn)的獨立值。
4.在數(shù)據(jù)框中以變量形式出現(xiàn)的向量結(jié)構(gòu)必須長度一致,矩陣結(jié)構(gòu)必須有一樣的行數(shù)。
R中用函數(shù)data.frame()生成數(shù)據(jù)框,其句法是:data.frame(data1,data2,……)
數(shù)據(jù)框的列名默認為變量名,也可對列名進行重新命名
也可以對數(shù)據(jù)框的行名進行修改
2.3.6 因子和有序因子
分類型數(shù)據(jù)經(jīng)常要把數(shù)據(jù)分成不同的水平或因子(factor)
生成因子的命令是factor(),其句法是:factor(data,levels,labels,……)
其中data表示數(shù)據(jù)
levels是因子水平向量
labels是因子的標簽向量
levels,labels是備選項,可以不選
若上面的每個因子并不表示因子的大小,要表達因子之間有大小順序(考慮因子之間的順序),則可以用 ordered()函數(shù)產(chǎn)生
2.4 數(shù)據(jù)的錄入及編輯
c函數(shù):c函數(shù)是把各個值聯(lián)成一個向量或列表,可以形成數(shù)值型向量、字符型向量或其它類型向量
scan函數(shù):功能類似于c函數(shù),實際上是一種鍵盤輸入數(shù)據(jù)函數(shù)。當輸入scan(),然后按回車鍵,這時將等待輸入數(shù)據(jù),數(shù)據(jù)之間只要空格分開即可(c函數(shù)要用逗號分開)。輸入完數(shù)據(jù),再按回車鍵,這時數(shù)據(jù)錄入完畢。
scan函數(shù)還可以讀入外部文本文件,若現(xiàn)有一個文本文件,data.txt,讀入這個文件的命令是:> x=scan(file="dat.txt")
若原文件的數(shù)據(jù)之間有逗號等分隔符,用scan讀入應該去掉這些分隔符,其命令是:> x=scan(file="dat.txt",sep=",")
編輯數(shù)據(jù)
data.entry命令
xx原先未被定義,現(xiàn)在賦予其一個空值,這時會出現(xiàn)一個電子表格界面,等待輸入數(shù)據(jù):> data.entry(xx=c(NA))
當電子表格關閉后,數(shù)據(jù)會自動保存
edit命令用來編輯函數(shù),也可用來編輯數(shù)據(jù),但不會自動保存
fix函數(shù)與edit類似,但它可以自動保存
從外部文件讀入數(shù)據(jù)
從文本文件讀?。?
> s1=read.table("student.txt")
> s1
V1 V2 V3
1 class sex score
2 1 女 80
3 1 男 85
4 2 男 92
5 2 女 76
6 3 女 61
7 3 女 95
8 3 男 83
讀入表格數(shù)據(jù)的命令是:read.table
忽略掉標簽而直接使用默認的行標簽
> s2=read.table("student.txt",header=T)
> s2
class sex score
1 1 女 80
2 1 男 85
3 2 男 92
4 2 女 76
5 3 女 61
6 3 女 95
7 3 男 83
從網(wǎng)絡讀入數(shù)據(jù)
url可以從網(wǎng)頁上讀入正確格式的數(shù)據(jù),要借助read.table函數(shù)
> address=http://www.the-data-mine.com/bin/view/Misc/WebHome
/sample.txt
> read.table(file=url(address))
讀入其他格式的數(shù)據(jù)庫
要讀入其他格式的數(shù)據(jù)庫,必須先安裝"foreign"模塊,它不屬于R的8個內(nèi)置模塊,需在使用前安裝。 library(foreign)
SAS:R只能詩篇SAS Transport format(XPORT)文件,需要把普通的SAS數(shù)據(jù)文件(.ssd和.sas7bdat)轉(zhuǎn)換成Transport format(XPORT)文件,再用命令:read.xport()
SPSS數(shù)據(jù)庫:read.spss()可讀入SPSS數(shù)據(jù)文件
Epi info數(shù)據(jù)庫:
要給數(shù)據(jù)集一個名字,則是;read.epiinfo("文件名.rec")->名稱
Stata數(shù)據(jù)庫:
R可讀入Stata5,6,7的數(shù)據(jù)庫
讀入數(shù)據(jù)文件后,使用數(shù)據(jù)集名$變量名,即可使用各個變量
> read.dta(“文件名.dta”)
讀入數(shù)據(jù)文件后,使用數(shù)據(jù)集名$變量名,即可使用各個變量。
>mean(data$age)
便是計算數(shù)據(jù)集 data中的變量age的均數(shù)。
2.5 函數(shù)、循環(huán)與條件表達式
2.5.1 編寫函數(shù)
句法是:
函數(shù)名 = function (參數(shù)1,參數(shù)2…)
{
函數(shù)體
函數(shù)返回值
}
對于這類只有一個算術(shù)式的簡單函數(shù),也要不要{}
>mean(data$age)
便是計算數(shù)據(jù)集 data中的變量age的均數(shù)。
若不使用圓括號,直接輸入函數(shù)名,按回車鍵將顯示函數(shù)的定義式:
單參數(shù):使函數(shù)個性化,可使用單參數(shù),函數(shù)將會根據(jù)參數(shù)的不同,返回值不同
> welcome.sb = function(names) print(paste("welcome",names,"to
use R"))
> welcome.sb("Mr fang")
[1] "welcome Mr fang to use R"
> welcome.sb("Mr Wang")
[1] "welcome Mr Wang to use R"
默認參數(shù):即不輸入任何參數(shù)
函數(shù)的默認參數(shù)
> welcome.sb=function(names="Mr fang")print(paste("welcome",
names,"to use R"))
> welcome.sb()
[1] "welcome Mr fang to use R"
當函數(shù)體的表達式超過一個時,要用{}封起來
2.5.2 for循環(huán)
for循環(huán)的句法是:
for (變量 in取值向量) {
表達式…
}
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎用法到實戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關聯(lián)查詢效率:打破 “拆分必慢” 的認知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預期算子的內(nèi)涵、作用與應用解析 動態(tài)隨機一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應用 在數(shù)據(jù)分析與統(tǒng)計學領域,假設檢驗是驗證研究假設、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進行 HTTP 網(wǎng)絡請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點數(shù)據(jù)的科學計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點數(shù)據(jù)時的科學計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務數(shù)據(jù)分析是企業(yè)解決日常運營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務邏輯:從規(guī)則拆解到數(shù)據(jù)把關的實戰(zhàn)指南 在業(yè)務系統(tǒng)落地過程中,“業(yè)務邏輯” 是連接 “需求設計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動下的精準零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當下,精準營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務數(shù)據(jù)分析:概念辨析與協(xié)同價值 在數(shù)據(jù)驅(qū)動決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實踐到業(yè)務價值挖掘 在數(shù)據(jù)分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價值導向 統(tǒng)計模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10