merge r语言daframe_R语言week2note

因子

函数factor()用来把一个向量编码成为一个因子.一般形式为:

factor(x, levels = sort(unique(x), na.last = TRUE), labels, exclude = NA, ordered = FALSE)

可以自行指定各离散取值水平(levels),不指定时由x的不同值来求得。

labels可以用来指定各水平的标签,不指定时用各离散取值的对应字符串。

exclude参数用来指定要转换为缺失值(NA)的元素值集合。如果指定了levels,则因子的第i个元素当它等于水平中第j个时元素值取“j”,如果它的值没有出现在levels中则对应因子元素值取NA。

ordered取真值时表示因子水平是有次序的(按编码次序)。

可以用is.factor()检验对象是否因子,用as.factor()把一个向量转换成一个因子。

例子:

x=c(1,0,1,1,0,2)

y=factor(x,levels=c(1,0),

labels=c("男", "女"),exclude=NA,order=F)

y

[1] 男 女 男 男 女

Levels: 男 女

因子的基本统计是频数统计,用函数table()来计数。

sex = factor(c("男", "女", "男", "男", "女"))

res.tab

res.tab

res.tab

男 女

3 2

可以用两个或多个因子进行交叉分类。比如,性别sex和职业job交叉分组可以用table(sex, job)来统计每一交叉类的频数,结果为一个矩阵,矩阵带有行名和列名,分别为两个因子的各水平名。

job=factor(c("teacher", "worker","worker", "worker","teacher"));

sex = factor(c("男", "女", "男", "男", "女"));

table(sex, job);

job

sex teacher worker

男 1 2

女 1 1

tapply

函数tapply的基本用法为:

tapply (X, INDEX, FUN = NULL, ..., simplify = TRUE )

X是向量;INDEX是和X同等长度的因子,FUN是要执行的函数,simplify取默认的TRUE,返回一个标量,取FALSE时,返回一个列表list。

tapply(h, sex, mean, simplify=F)

$男

[1] 168.3333

$女

[1] 164.5

d

d$over25 25,1,0)

tapply(d$income,list(d$gender,d$over25),mean)

0 1

F 39050 123000.00

M NA 73166.67

tapply和sapply区别

前者返回列表后者向量结果

L1

lapply(L1,median)

[[1]]

[1] 2

[[2]]

[1] 27

sapply(L1,median)

[1] 2 27

merge

类似于SAS等其他统计软件,可以通过它将两张表根据某个共同变量的值组合到一起. 简单调用形式为merge(x,y):引用网上资料:R语言之merge详解

merge函数的声明:

merge(x, y, by = intersect(names(x), names(y)), by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all, sort = TRUE, suffixes = c(".x",".y"), incomparables = NULL, ...)

merge函数参数的说明:

x,y:用于合并的两个数据框

by,by.x,by.y:指定依据哪些行合并数据框,默认值为相同列名的列.

all,all.x,all.y:指定x和y的行是否应该全在输出文件.

sort:by指定的列是否要排序.

suffixes:指定除by外相同列名的后缀.

incomparables:指定by中哪些单元不进行合并.

例子:

w1:

NAME SCHOOL CLASS ENGLISH

A S1 10 85

B S2 5 50

A S1 4 90

A S1 11 90

C S1 1 12

w2:

NAME SCHOOL CLASS MATHS ENGLISH

A S3 5 80 88

B S2 5 89 81

C S1 1 55 32

按照NAME, SCHOOL, CLASS合并w1和w2:

merge(w1, w2, all = T)

NAME SCHOOL CLASS ENGLISH MATHS

1 A S1 4 90 NA

2 A S1 10 85 NA

3 A S1 11 90 NA

4 A S3 5 88 80

5 B S2 5 50 NA

6 B S2 5 81 89

7 C S1 1 12 NA

8 C S1 1 32 55

merge(w1, w2, by = c("NAME", "SCHOOL", "CLASS"), all = T)

NAME SCHOOL CLASS ENGLISH.x MATHS ENGLISH.y

1 A S1 4 90 NA NA

2 A S1 10 85 NA NA

3 A S1 11 90 NA NA

4 A S3 5 NA 80 88

5 B S2 5 50 89 81

6 C S1 1 12 55 32

merge(w1, w2, all = T, by = "NAME", incomparables = "A")

NAME SCHOOL.x CLASS.x ENGLISH.x SCHOOL.y CLASS.y MATHS ENGLISH.y

1 A S1 10 85 NA NA NA

2 A S1 4 90 NA NA NA

3 A S1 11 90 NA NA NA

4 A NA NA S3 5 80 88

5 B S2 5 50 S2 5 89 81

6 C S1 1 12 S1 1 55 32

split

划分组

d

gender age income over25

1 M 47 55000 1

2 M 59 88000 1

3 F 21 32450 0

4 M 32 76500 1

5 F 33 123000 1

6 F 24 45650 0

Grp

返回的是以列表存储的分组结果,第一个自变量可以是数据框

by()

aba

by(aba,aba$Gender,function(m) lm(m[,2]~m[,3]))

读入数据; 按性别分组后,对第2列关于第3列分别做线性回归.

formatC

类似C语言的printf格式功能,formatC对输入向量的每一个元素单独进行格式转换而不生成统一格式

在formatC()函数中可以用format=参数指定C格式类型,如“d”(整数),“f”(定点实数),“e”(科学记数法),“E”, “g”(选择位数较少的输出格式),“G”, “fg”(定点实数但用digits 指定有效位数),“s”(字符串)

可以用width指定输出宽度,用digits指定有效位数(格式为e,E,g,G,fg时)或小数点后位数(格式为f)时。可以用flag参数指定一个输出选项字符串,字符串中有”-“表示输出左对齐,有”0”表示左空白用0填充,有”+”表示要输出正负号,等等。

例如,我们有一个矩阵da中保存了三个日期的年、月、日

da

[,1] [,2] [,3]

[1,] 99 1 3

[2,] 96 11 9

[3,] 65 5 18

为了输出这三个日期,可以用apply函数指定对每一行作用一个输出函数,此输出函数利用cat()和formatC来控制:

apply(da, 1, function(r) cat(formatC(r[1], format='d', width=2, flag='0'), '-', formatC(r[2], format='d', width=2, flag='0'), '-', formatC(r[3], format='d', width=2, flag='0'), '\n', sep=''))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值