R--因子與表

因子

#可以看做一個(gè)附加了更多信息的向量沮尿,包括向量中不同值的記錄
#稱為水平level
x <- c(4,23,12,3)
xf <- factor(x)
#3,4,12,23就是水平
#數(shù)據(jù)是按照重新編碼為水平,2,4,3,1
#另外水平本身也被記錄了缴饭,是被記做字符
#因子的長(zhǎng)度為數(shù)據(jù)的長(zhǎng)度
length(xf)
#提前插入新的水平
x <- c(5,12,13,12)
xff <- factor(x,levels = c(5,12,13,88))
xff[2] <- 88```

#tapply()函數(shù)

利用因子或者因子表,使用對(duì)應(yīng)函數(shù)對(duì)數(shù)據(jù)框進(jìn)行操作

因子表中因子需要與x有相同的長(zhǎng)度

因子表的一部分是向量的話,需要使用函數(shù)as.factor()強(qiáng)制將其轉(zhuǎn)化為因子

tapply()執(zhí)行操作是竭贩,將x分組,每組對(duì)應(yīng)一個(gè)因子水平

或者一組因子水平的組合莺禁,得到x的子向量留量,然后子向量應(yīng)用函數(shù)g

ages <- c(25,26,55,37,21,42)

因子保持和x相同長(zhǎng)度,affils對(duì)應(yīng)不同索引,然后分組

affils <- c("R","U","R","U","D","D")
tapply(ages,affils,mean)```

多重因子的情況

d <- data.frame(list(gender = c("M","M","F","M","F","F"),
                     age=c(47,59,21,32,43,23),
                     income = c(55000,88000,32450,76500,123000,45650)))
#加入新的因子組哟冬,年齡大于25為1
d$over25 <- ifelse(d$age > 25,1,0)
#應(yīng)用tapply()函數(shù),對(duì)d$income進(jìn)行分析
tapply(d$income,list(d$gender,d$over25),mean)
#tapply(x,f,func)中x為向量楼熄,不能是數(shù)據(jù)庫(kù)```

#split()函數(shù)

split(x,f)x可以是數(shù)據(jù)框,然后將x根據(jù)因子表劃分成組

split(d$income,list(d$gender,d$over25))

輸出是一個(gè)列表浩峡,也就是分組的組件組成列表

將數(shù)據(jù)迅速按照因子表進(jìn)行分組

g <- c("M","F","F","I","M","M","F")

x與因子表的長(zhǎng)度要一致

split(1:7,g)

findword()函數(shù)的改寫(xiě)

findwords <- function(tf){

讀取字符串?dāng)?shù)據(jù)可岂,然后是返回一個(gè)字符串向量

txt <- scan(tf,what="")

將索引值按照因子向量單詞進(jìn)行分組,這樣就可以快速的

把每個(gè)單詞在什么索引提取出來(lái)了,返回一個(gè)列表

words <- split(1:length(txt),txt)
return(words)
}```

by()函數(shù)

#tapply()函數(shù)第一個(gè)參數(shù)必須是向量翰灾,不能是矩陣或者數(shù)據(jù)框
#然后by()函數(shù)使應(yīng)用于對(duì)象而不僅是向量
aba <- read.csv("abalone.csv",header = T)
#aba是讀取出來(lái)的數(shù)據(jù)框
#使用by函數(shù)對(duì)aba數(shù)據(jù)框中的2,3列根據(jù)gender作為因子進(jìn)行回歸分析
by(aba,aba$gender,function(m) lm(m[,2]~m[,3]))```

#表的操作

u <- c(22,8,33,6,8,29,-2)
f1 <- list(c(5,12,13,12,13,5,13),c("a","bc","a","a","bc","a","a"))

tapply使用因子將向量u劃分成6個(gè)子向量缕粹,然后用length函數(shù)

tapply(u,f1,length)

table()函數(shù)第一個(gè)參數(shù)是因子或者因子的列表

table(f1)

一個(gè)能被當(dāng)成因子的對(duì)象頻數(shù)就是1

使用table()得到一維的頻數(shù)表,每個(gè)因子的頻數(shù)

table(c(5,12,13,12,8,5))

R用table()將三維表以一系列二維表的形式打印出來(lái)

ls <- list(gender=c("M","M","F","M"),race=c("w","w","A","O"),pol=c("L","L","C","L"))
fmls <- data.frame(ls)
vt <- table(fmls)

可以使用矩陣的操作來(lái)用在表中预侯,如cttab[1,1],cttab[,1]第一列

dimnames()函數(shù)獲得維度的名稱和水平值```

提取子表

#rje包致开,Subset(子集) an array,subset()函數(shù)默認(rèn)不計(jì)算NA值
#subtable()完成子表的提取
#第一個(gè)參數(shù)是tbl,感興趣的表萎馅,第二個(gè)參數(shù)是subnames是列表双戳,想要提取的子表
#該列表的每個(gè)組件都是以tbl的某個(gè)維度命名,然后組件的值是所需水平的名稱向量
x <- c("yes","yes","no","not sure")
y <- c("yes","no","yes","no")
#使用水平(因子向量)來(lái)建立表 
d <- list(x,y)
td <- table(d)
#由數(shù)據(jù)框建立好了table
#使用subtable()提取子表
#首先建立要提取的子表列表
nl <- list(d.1 = c("no","yes"),d.2 = c("no","yes"))
library(rje)
#第二個(gè)參數(shù)是an integer vector containing the dimensions of x to subset
subtable(td,c(1,2),nl)```

#aggregate()函數(shù)

對(duì)分組中的每一個(gè)變量調(diào)用tapply()函數(shù)

aggregate(aba[,1],list(aba$gender),median)

首先第一個(gè)參數(shù)表示去除第一列之外的整個(gè)數(shù)據(jù)框

第二個(gè)參數(shù)是列表糜芳,以gender進(jìn)行分組

使用median函數(shù)處理分組后的每一個(gè)變量```

cut()函數(shù)

#可以用來(lái)生成因子
#函數(shù)需要數(shù)據(jù)向量x和向量b定義的一組區(qū)間
#函數(shù)將確定x中每個(gè)元素落入哪個(gè)區(qū)間飒货,返回落入的區(qū)間索引值
x <- c(4,3,4,5,6,1)
y <- seq(from=0,to=10,by=1)
#labels for the levels of the resulting category.
#By default, labels are contructed using "(a,b] interval notation
#if false,simple integer codes are returned instead of a factor
cut(x,y,labels = F)```
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末魄衅,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子塘辅,更是在濱河造成了極大的恐慌晃虫,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扣墩,死亡現(xiàn)場(chǎng)離奇詭異哲银,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)呻惕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)荆责,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人亚脆,你說(shuō)我怎么就攤上這事做院。” “怎么了濒持?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵键耕,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我柑营,道長(zhǎng)屈雄,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任由境,我火速辦了婚禮棚亩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘虏杰。我一直安慰自己讥蟆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布纺阔。 她就那樣靜靜地躺著瘸彤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪笛钝。 梳的紋絲不亂的頭發(fā)上质况,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音玻靡,去河邊找鬼结榄。 笑死,一個(gè)胖子當(dāng)著我的面吹牛囤捻,可吹牛的內(nèi)容都是我干的臼朗。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼视哑!你這毒婦竟也來(lái)了绣否?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤挡毅,失蹤者是張志新(化名)和其女友劉穎蒜撮,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體跪呈,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡段磨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了耗绿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片薇溃。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖缭乘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情琉用,我是刑警寧澤堕绩,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站邑时,受9級(jí)特大地震影響奴紧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晶丘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一黍氮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧浅浮,春花似錦沫浆、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至郁油,卻和暖如春本股,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背桐腌。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工拄显, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人案站。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓躬审,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子盒件,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容