转载

R入门笔记2

续上一篇R快速入门笔记,本文是最近学习R的一些笔记心得。

1. 常见数值计算函数

log(e) 默认是以e为底的自然对数。如果以10为底则修改第二个参数即可。 exp 是e的指数函数,其他的指数计算直接用 x^n 即可,例如:

> log2(4) [1] 2 > log10(1) [1] 0 > log10(10) [1] 1 > log(10,10) [1] 1 > log(exp(1)) [1] 1 >  2^3 [1] 8

2. 数列、数组

rep() : 输入重复元素

> rep(1, 8) [1] 1 1 1 1 1 1 1 1 > rep(c(1,2,3,4),8)  [1] 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 > array(1:12, dim=c(3,4))      [,1] [,2] [,3] [,4] [1,]    1    4    7   10 [2,]    2    5    8   11 [3,]    3    6    9   12 # 取其中一行/列 > array(1:12, dim=c(3,4))[2,] [1]  2  5  8 11 > array(1:12, dim=c(3,4))[,2] [1] 4 5 6

3. 数据框

数据狂是一个类似关系数据库表的数据结构,其中每列的数据类型可以不同,但是数据长度必须一致。数据框非常适合用于数据分析,它的每一列可以代表数据的每个标量或属性,每一行代表一个样本。例如:

sex <- c('F','M','F','F','M') age <- c(23,43,51,32,60) city <- c('bj','sh','cd','sjz', 'hrb') people <- data.frame(city, age, sex) people$age people[,2] people[people$age>30,]    #注意如果要显示所有数据,必须加逗号,[条件, ]。否则会显示undefined columns selected.

多个条件使用&,|和!来表示。

mean(people$age) 平均年龄

names(people)

nrow(people)

按排序显示:

ord1 <- order(people$age) people[ord1,]

实用factor因子来定义标签,可以重新定义标签值

> people$NSEX<-factor(people$sex, levels=c('F','M'), labels=c(1, 2)) > unique(people$age) [1] 23 43 51 32 60

可以用attach将数据框中的符号引入到全局空间中:

attach(people) The following objects are masked _by_ .GlobalEnv:      age, city, sex

4. 列表

列表(List)是非常灵活的数据结构,它的不同元素可以是不同类型(每个元素可以当作一个R中的变量),也可以是不同的长度。

> l <- list() > l[["a"]] <- 1 > l[["b"]] <- "hello" > l[["c"]] <- c("h", "e", "l", "l", "o") > l $a [1] 1  $b [1] "hello"  $c [1] "h" "e" "l" "l" "o"

另外使用list的常用场景是lapply, 调用函数的每一个返回值都会作为list中的成员:

lst            <- lapply(dates, function() {...}, other_arguments) df <- df.rbindList(lst);

5. 几个矩阵相关操作

(1). cbind()让若干向量以列的方式拼成, rbind()以行(row)(2). 对矩阵一行/列来赋值

dmat <- matrix(nrow=8, ncol=4) dmat[,2]<-c(1,2,3,4,5,6,7,8)

(3). 同时对多个向量执行同一个操作

sapply(veg[, 5:9], FUN=mean)

(4). 取值形成矩阵

> table(people$city, people$age)             23 32 43 51 60   bj   1  0  0  0  0   cd   0  0  0  1  0   hrb  0  0  0  0  1   sh   0  0  1  0  0   sjz  0  1  0  0  0

6. 向量相关

(1). sum, min, max & prod 与 cumsum, cumprod, cummin, cummax(2). split函数可以根据某一列/某一条件来拆分

> a <- c(1,1,2,3,4,5,6,7,8,6) > d <- c(0,0,0,0,0,0,1,2,1,2)> dd <- data.frame(a, d) > split(dd$a, dd$d) $`0` [1] 1 1 2 3 4 5  $`1` [1] 6 8  $`2` [1] 7 6  > split(dd, dd$d) $`0`   a d 1 1 0 2 1 0 3 2 0 4 3 0 5 4 0 6 5 0 $`1`   a d 7 6 1 9 8 1 $`2`    a d 8  7 2 10 6 2 > split(dd, dd$d==0) $`FALSE`    a d 7  6 1 8  7 2 9  8 1 10 6 2 $`TRUE`   a d 1 1 0 2 1 0 3 2 0 4 3 0 5 4 0 6 5 0

(3). order用于获得某一向量有序的索引,例如

> dd[order(dd$a), "a"]  [1] 1 1 2 3 4 5 6 6 7 8

7. 其他

(1). sapply是simplify了的lapply,所谓的simplify,是指对结果的数据结构进行了simplify,方便后续处理。

sapply(scores, mean)

YuWen ShuXue

83.0 86.2

sapply(scores, quantile, probs=c(0.5,0.7,0.9))

YuWen ShuXue

50% 84.0 87.0

70% 88.6 96.6

90% 92.2 99.6

(2). tapply用于接收一系列向量并形成table,例如:

tapply(dd$a, dd$d, mean)        0        1        2  2.666667 7.000000 6.500000
(3).

apply中都有一个na.rm=TRUE选项,用于排除迭代向量中的NA值。

(4). R studio的source编辑页面可以用ctrl+n来执行

(5). 条件函数 *ifelse(条件,当条件满足时执行,当条件失败时执行)

等同于 if() {…} else {…}

参考

《R语言核心编程手册》《R统计学入门》

正文到此结束
Loading...