-
4-3 mapply
mapply:lapply的多元版本? mapply(參數(shù)):mapply(函數(shù)/函數(shù)名,數(shù)據(jù),函數(shù)相關(guān)的參數(shù))
例:list(rep(1,4),rep(2,3),rep(3,2),rep(4,1))(第1個(gè)元素是4個(gè)1,第2個(gè)元素是3個(gè)2)
? ? ? ?mapply(rep,1:4,4:1)(元素是1到4,4:1規(guī)定了前面元素要重復(fù)多少次)
定義函數(shù):? s<-function(n,mean,std){rnorm(n,mean,std)}(從隨機(jī)分布的總體里抽取指定個(gè)數(shù)的數(shù)據(jù))(花括號中意義是從均值為mean,標(biāo)準(zhǔn)差為std的總體里抽取n個(gè)數(shù)據(jù))
調(diào)用函數(shù):s(4,0,1)(從均值為0,標(biāo)準(zhǔn)差為1的正態(tài)分布總體里調(diào)用4個(gè)數(shù)據(jù))
mapply(s,1:5,5:1,2)(1:5對應(yīng)的4,即每一次抽取多少個(gè)數(shù)據(jù)出來,5:1對應(yīng)的0,即分布的均值,2即為分布的標(biāo)準(zhǔn)差)
?同上面的命令:list(s(1,5,2),s(2,4,2),s(3,3,2),s(4,2,2),s(5,1,2))
查看全部 -
4-2R語言函數(shù) apply
apply:沿著數(shù)組的某一維度處理數(shù)據(jù)
例如:將函數(shù)用于矩陣的行或列
雖然與for/while循環(huán)效率相似,但是只用一句話就可以完成
apply(參數(shù)):apply(數(shù)組,維度,函數(shù)/函數(shù)名)
例:1.x<-matrix(1:16,4,4)
? ? ? ? ?apply(x,2,mean)(對x求列的平均)
? ? ? ? ?apply(x,2,sum)
相同于:rowSums(x)? rowMeans(x)
? ? ? ? ? ? ? colSums(x)? ?colMeans(x)
? ? ? ?2.x<-matrix(rnorm(100),10,10)(隨機(jī)從正態(tài)分布的總體里抽取100個(gè)數(shù)據(jù))
? ? ? ? ? apply(x,1,quantile,probs=c(0.25,0.75))(求25%和75%的百分位點(diǎn)所對應(yīng)的數(shù)據(jù))
? ? ? ?3.x<-array(rnorm(2*3*4),c(2,3,4))(三維數(shù)據(jù),維度是2,3,4,第3維是4,即有4個(gè)2行3列的矩陣)
? ? ? ? ? apply(x,c(1,2),mean)(在第1維和第2維組成的平面上,沿著第4維進(jìn)行求平均)
? ? ? ? ??apply(x,c(1,3),mean)
? ? ? ? ??apply(x,c(2,3),mean)
查看全部 -
第4章 重要函數(shù)的使用
4-1 R語言函數(shù) lapply
處理循環(huán):R不僅有for/while循環(huán)語句(特點(diǎn):需要些多行代碼),還有更強(qiáng)大的實(shí)現(xiàn)循環(huán)的“一句話”函數(shù)。
排序
總結(jié)數(shù)據(jù)信息
lapply:可以循環(huán)處理列表中的每一個(gè)元素??
? ? ? ? ? ?lapply(參數(shù)):lapply(列表,函數(shù)/函數(shù)名,其他參數(shù))
? ? ? ? ? ?結(jié)果:總是返回一個(gè)列表
例:1.str(lapply)(其作用是把任意的R對象以一種整潔緊湊的形式顯示出來)
? ? ? ? ? x<-list(a=1:10,b=c(11,21,31,41,51))
? ? ? ? ? lapply(x,mean)
? ? ? ? 2.x<-1:4(在lapply內(nèi)部,會強(qiáng)制轉(zhuǎn)化為列表)
? ? ? ? ? ?lapply(x,runif)(從均勻分布的總體里抽取若干個(gè)數(shù),默認(rèn)從0到1之間抽取)
? ? ? ? ? ?lapply(x,runif,min=0,max=100)(從0到100之間抽取)
? ? ? ? 3.x<-list(a=matrix(1:6,2,3)),b=matrix(4:7,2,2)
? ? ? ? ? ?lapply(x,function(m)m[1,])(m為匿名函數(shù),對x中的每一個(gè)矩陣都取出它第1行的元素)
sapply:與lapply非常相似,它可以在允許的情況下對lapply的結(jié)果進(jìn)行化簡。結(jié)果列表元素長度均為1,返回向量;結(jié)果列表長度相同且大于1,返回矩陣;其他情況與lapply相同。
例:? ?x<-list(a=1:10,b=c(11,21,31,41,51))
? ? ? ? ? lapply(x,mean)
? ? ? ? ? sapply(x,mean)
? ? ??
查看全部 -
3-6向量化操作
向量化操作(vectorized operation):可以作用于向量、矩陣等結(jié)構(gòu),使得代碼簡潔、易于閱讀、效率高。
例:x<-1:5
? ? ? ?y<-6:10
? ? ? ?x+y
? ? ? ?x*y
? ? ? ?x/y
x<-matrix(1:4,nrow=2,ncol=2)
y<-matrix(rep(2,4),nrow=2,ncol=2)(把第1個(gè)參數(shù)重復(fù)第2個(gè)參數(shù)指定的次數(shù))
x*y
x/y
x%*%y(矩陣乘以矩陣)
查看全部 -
3-5處理缺失值
x<-c(1,NA,2,NA,3)
is.na(x)
x[!is.na(x)] (取x中不是缺失值的部分,!的意思是取反,即真變假)
x<-c(1,NA,2,NA,3)
y<-c("a","b",NA,"c"NA)
z<-complete.cases(x,y)(運(yùn)行之后x和y都不是缺失值的位置才會是TRUE)
然后x[z]? y[z]就可以拿到都不是缺失值的元素
進(jìn)一步看complete函數(shù)的功能:
首先加載一下數(shù)據(jù)集所在的包? ?library(datasets)
head(airquality)(看一下數(shù)據(jù)集)
通常情況下會選擇都沒有缺失值的變量? g<-complete.cases(airquality)
airquality[g,][1:10,](得出的結(jié)果是沒有缺失值的)
查看全部 -
3-4列表的子集
構(gòu)建列表的子集:[[]]/$/[[]][]/[[]][[]]
? ? ? ? ? ? ? ? ? ? ? ? ? ?嵌套列表/不完全匹配(partial matching)
1.x<-list(id=1:4,height=170,gender="male")
? ?x[1](列表中的第1個(gè)元素) = x["id"]
? ?x[[1]](只拿到內(nèi)容 而不是元素名稱加內(nèi)容)=x[["id"]] = x$id
? ?y<-"id"
? ?x[["id"]]=x[[y]] 但不可以直接x$y
2.x<-list(a=list(1,2,3,4),b=c("Monday","Tuesday"))
x[[1]]? ? ? ? x[[1]][[2]](x第1個(gè)元素中第2個(gè)元素的內(nèi)容)
x[[c(1,3)]](拿到第1個(gè)元素中的第2個(gè)元素)
x[[c(2,2)]](拿到第2個(gè)元素中的第2個(gè)元素)
不完全匹配:
l<-list(asdfghj=1:10)
l$asdfghj=l$a(這就是列表的不完全匹配)
l[["a"]](精確匹配 結(jié)果顯示NULL)
l[["a",exact=FALSE]](后面的函數(shù)就關(guān)掉了精確匹配)
x<-list(asdfghj=1:10,b=1:2,aaa=3:5)(當(dāng)元素名稱會造成混淆時(shí)R會返回NULL)
查看全部 -
3-3數(shù)據(jù)框的子集
x<-data.frame(v1=1:5,v2=6:10,v3=11:15)
x$v3[c(2,4)]<-NA(把v3列的第2個(gè)和第4個(gè)定義成了缺失值)
x[,2]數(shù)據(jù)框中的第2列 = x[,"v2"]
x[(x$v1<4&x$v2>=8),]
x[x$v1>2,]
x[which(x$v1>2),](which是給出哪些是真)
查看全部 -
3-2矩陣的子集
構(gòu)建子集:
x<-matrix(1:6,nrow=2,ncol=3)
x[1,2](想拿到第1行第2列的元素)? ? x[2,3](拿到第2行第3列的元素 )
x[1,](拿到1整行的數(shù)據(jù))? x[,1](拿到1整列的數(shù)據(jù))
x[2,c(1,3)](拿到第2行第1列和第3列的元素)
class(x[1,2])? ?得到的是向量類型
x[1,2,drop=FALSE](drop=FLASE函數(shù)幫我們關(guān)掉了返回向量,返回的是一個(gè)矩陣)
查看全部 -
第3章 操縱數(shù)據(jù):構(gòu)建子集(subsetting)
3-1基本方法
原始數(shù)據(jù)(raw dataset)——預(yù)處理后的數(shù)據(jù)(clean dataset)
基本方法:
[]:提取一個(gè)或多個(gè)類型相同的元素
[[]]:從列表或數(shù)據(jù)框中提取元素
$:按名字從列表或數(shù)據(jù)框中提取元素
補(bǔ)充:R語言的數(shù)組下表是從1開始而不是0開始
例:x<-1:10? ? x[1] (拿到x的第1個(gè)元素)? x[1:5] (拿到x的前5個(gè)元素)? ?x[x>5] (拿大于5的元素)
x[x>5&x<7]? ? ? x[x<3|x>7]
y<-1:4
names(y)<-c("a","b","c","d")? ?y[2]? ?y["b"](都是拿到y(tǒng)的第2個(gè)元素)
查看全部 -
2-8日期與時(shí)間
日期與時(shí)間(date,time)
日期:Date
x<-date()(獲取當(dāng)前系統(tǒng)的時(shí)間)
x2<-Sys.Date()(獲取R中date日期類型的數(shù)據(jù))
x3<-as.Date("2021-09-18")(如何把任意一個(gè)日期存儲為Date這種類型)
weekdays(x3)(日期為星期幾)
months(x3)(日期是幾月)
quarters(x3)(日期為一年中哪個(gè)季度)
julian(x3)(日期距離1970-01-01有多少天)
x4<-as.Date("2016-01-01")
x4-x3(兩個(gè)日期的時(shí)間差) as.numeric(x4-x3)
時(shí)間:POSIXct/POSIXlt
POSIXct:整數(shù),常用于存入數(shù)據(jù)框
POSIXlt:列表,還包含星期、年、月、日等信息
x<-Sys.time()(獲取當(dāng)前系統(tǒng)的時(shí)間)
p<-as.POSIXlt(x)(類型之間的轉(zhuǎn)換)
names(unclass(p))(lt的類型中存了哪些變量,使用unclass,把內(nèi)容留下 把屬性去掉)
p$sec(看一下有多少秒 秒是變量之一)
如何把以不同格式表示的字符串轉(zhuǎn)換成我們想要的類型:
例:x1<-"Jan 1, 2015 01:01"
strptime(x1,"%B %d %Y %H:%M")
查看全部 -
2-7數(shù)據(jù)框
數(shù)據(jù)框(data frame):存儲表格數(shù)據(jù)(tabular data),我們可以把數(shù)據(jù)框當(dāng)成一種列表形式,其中各元素的長度是相同的(1.每個(gè)元素代表一列數(shù)據(jù) 2.每個(gè)元素的長度代表行數(shù) 3.元素類型可以不同)
如何創(chuàng)建一個(gè)數(shù)據(jù)框:
df<-data.frame(id=c(1,2,3,4),name=c("a","b","c","d"),gender=c(TRUE,TRUE,FALSE,FALSE))(第一個(gè)參數(shù)代表第一列的內(nèi)容,第二個(gè)參數(shù)代表第二列的內(nèi)容)
nrow(df)
ncol(df)
df2<-data.frame(id=c(1,2,3,4),score=c(80,86,90,100))
data.matrix(df2)(將數(shù)據(jù)框轉(zhuǎn)化為矩陣)
查看全部 -
2-7數(shù)據(jù)框
數(shù)據(jù)框(data frame):存儲表格數(shù)據(jù)(tabular data),我們可以把數(shù)據(jù)框當(dāng)成一種列表形式,其中各元素的長度是相同的(1.每個(gè)元素代表一列數(shù)據(jù) 2.每個(gè)元素的長度代表行數(shù) 3.元素類型可以不同)
如何創(chuàng)建一個(gè)數(shù)據(jù)框:
df<-data.frame(id=c(1,2,3,4),name=c("a","b","c","d"),gender=c(TRUE,TRUE,FALSE,FALSE))(第一個(gè)參數(shù)代表第一列的內(nèi)容,第二個(gè)參數(shù)代表第二列的內(nèi)容)
nrow(df)
ncol(df)
df2<-data.frame(id=c(1,2,3,4),score=c(80,86,90,100))
data.matrix(df2)(將數(shù)據(jù)框轉(zhuǎn)化為矩陣)
查看全部 -
2-6缺失值
缺失值(missing value):NA/NaN
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NaN屬于NA,NA不屬于NaN,因?yàn)镹aN一般用來表示數(shù)字的缺失值,而NA? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 可以表示的缺失值的類型更廣,如數(shù)字的缺失值,字符的缺失值等。此外,NA? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 是有類型屬性的:integer NA, character NA 等
如果要判斷一個(gè)向量中是否有缺失值:is.na()/is.nan()
例如:x<-c(1,NA,2,NA,3)
? ? ? ? ? is.na(x)
? ? ? ? ? is.nan(x)? 印證了x不屬于nan,也印證了NaN判斷不出NA
? ? ? ? ? x<-c(1,NaN,2,NaN,3)
? ? ? ? ? is.na(x)
? ? ? ? ? is.nan(x)
查看全部 -
2-5? factor
因子(factor):分類數(shù)據(jù)(有序/無序)
? ? ? ? ? ? ? ? ? ? ? ? 可以理解為整數(shù)型向量+標(biāo)簽(label)(優(yōu)于整數(shù)向量)
Male/Female vs.1/2
常用于lm(),glm()
創(chuàng)建因子:
x<-factor(c("female","female","male","male","female"))
y<-factor(c("female","female","male","male","female"),levels=c("male","female"))(levels是因子的屬性,誰在前誰是基線水平)
table(x)對當(dāng)前因子有整體性的了解
unclass(x)去掉因子的屬性
class(unclass(x))查看unclass(x)的屬性
查看全部 -
2-4列表
列表(list):可以包含不同類型的對象
創(chuàng)建列表:1.l<-list("a",2,10L,3+4i,TRUE)
? ? ? ? ? ? ? ? ?2.l2<-list(a=1,b=2,c=3)(給列表里的元素命名)
? ? ? ? ? ? ? ? ?3.l3<-list(c(1,2,3),c(4,5,6,7))(列表中每一個(gè)元素包含的元素大于1的列表)
? ? ? ? ? ? ? ? ?4.給矩陣的每一行每一列命名:
? ? ? ? ? ? ? ? ? x<-matrix(1:6,nrow=2,ncol=3)
? ? ? ? ? ? ? ? ? dimnames(x)<-list(c("a","b"),c("c","d","e"))
查看全部
舉報(bào)