R--因子与表

因子

#可以看做一个附加了更多信息的向量,包括向量中不同值的记录
#称为水平level
x <- c(4,23,12,3)
xf <- factor(x)
#3,4,12,23就是水平
#数据是按照重新编码为水平,2,4,3,1
#另外水平本身也被记录了,是被记做字符
#因子的长度为数据的长度
length(xf)
#提前插入新的水平
x <- c(5,12,13,12)
xff <- factor(x,levels = c(5,12,13,88))
xff[2] <- 88```

#tapply()函数

利用因子或者因子表,使用对应函数对数据框进行操作

因子表中因子需要与x有相同的长度

因子表的一部分是向量的话,需要使用函数as.factor()强制将其转化为因子

tapply()执行操作是,将x分组,每组对应一个因子水平

或者一组因子水平的组合,得到x的子向量,然后子向量应用函数g

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

因子保持和x相同长度,affils对应不同索引,然后分组

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)
#应用tapply()函数,对d$income进行分析
tapply(d$income,list(d$gender,d$over25),mean)
#tapply(x,f,func)中x为向量,不能是数据库```

#split()函数

split(x,f)x可以是数据框,然后将x根据因子表划分成组

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

输出是一个列表,也就是分组的组件组成列表

将数据迅速按照因子表进行分组

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

x与因子表的长度要一致

split(1:7,g)

findword()函数的改写

findwords <- function(tf){

读取字符串数据,然后是返回一个字符串向量

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

将索引值按照因子向量单词进行分组,这样就可以快速的

把每个单词在什么索引提取出来了,返回一个列表

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

by()函数

#tapply()函数第一个参数必须是向量,不能是矩阵或者数据框
#然后by()函数使应用于对象而不仅是向量
aba <- read.csv("abalone.csv",header = T)
#aba是读取出来的数据框
#使用by函数对aba数据框中的2,3列根据gender作为因子进行回归分析
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个子向量,然后用length函数

tapply(u,f1,length)

table()函数第一个参数是因子或者因子的列表

table(f1)

一个能被当成因子的对象频数就是1

使用table()得到一维的频数表,每个因子的频数

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

R用table()将三维表以一系列二维表的形式打印出来

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)

可以使用矩阵的操作来用在表中,如cttab[1,1],cttab[,1]第一列

dimnames()函数获得维度的名称和水平值```

提取子表

#rje包,Subset(子集) an array,subset()函数默认不计算NA值
#subtable()完成子表的提取
#第一个参数是tbl,感兴趣的表,第二个参数是subnames是列表,想要提取的子表
#该列表的每个组件都是以tbl的某个维度命名,然后组件的值是所需水平的名称向量
x <- c("yes","yes","no","not sure")
y <- c("yes","no","yes","no")
#使用水平(因子向量)来建立表 
d <- list(x,y)
td <- table(d)
#由数据框建立好了table
#使用subtable()提取子表
#首先建立要提取的子表列表
nl <- list(d.1 = c("no","yes"),d.2 = c("no","yes"))
library(rje)
#第二个参数是an integer vector containing the dimensions of x to subset
subtable(td,c(1,2),nl)```

#aggregate()函数

对分组中的每一个变量调用tapply()函数

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

首先第一个参数表示去除第一列之外的整个数据框

第二个参数是列表,以gender进行分组

使用median函数处理分组后的每一个变量```

cut()函数

#可以用来生成因子
#函数需要数据向量x和向量b定义的一组区间
#函数将确定x中每个元素落入哪个区间,返回落入的区间索引值
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)```
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,417评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,921评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,850评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,945评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,069评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,188评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,239评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,994评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,409评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,735评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,898评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,578评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,205评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,916评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,156评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,722评论 2 363
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,781评论 2 351

推荐阅读更多精彩内容