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] 男   女   男   男   女   <NA>
Levels: 男 女

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

sex = factor(c("男", "女", "男", "男", "女"))
res.tab <- table(sex) 
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        21        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 <- data.frame(list(gender=c("M","M","F","M","F","F"),age=c(47,59,21,32,33,24),income=c(55000,88000,32450,76500,123000,45650)))
d$over25 <- ifelse(d$age > 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<-list(1:3,25:29)
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        NA
2    A       S1       4        90     <NA>      NA    NA        NA
3    A       S1      11        90     <NA>      NA    NA        NA
4    A     <NA>      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<-split(d$income,list(d$gender,d$over25))

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

by()

aba <- read.csv("abalone.data",header=TRUE)
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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值