续上一篇R快速入门笔记,本文是最近学习R的一些笔记心得。
1. 常见数值计算函数
log(e) 默认是以e为底的自然对数。如果以10为底则修改第二个参数即可。exp是e的指数函数,其他的指数计算直接用x^n即可,例如:
1 2 3 4 5 6 7 8 9 10 11 12 |
> 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(): 输入重复元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
> 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. 数据框
数据狂是一个类似关系数据库表的数据结构,其中每列的数据类型可以不同,但是数据长度必须一致。数据框非常适合用于数据分析,它的每一列可以代表数据的每个标量或属性,每一行代表一个样本。例如:
1 2 3 4 5 6 7 |
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)
按排序显示:
1 2 |
ord1 <- order(people$age) people[ord1,] |
实用factor因子来定义标签,可以重新定义标签值
1 2 3 |
> people$NSEX<-factor(people$sex, levels=c('F','M'), labels=c(1, 2)) > unique(people$age) [1] 23 43 51 32 60 |
可以用attach将数据框中的符号引入到全局空间中:
1 2 3 4 |
attach(people) The following objects are masked _by_ .GlobalEnv: age, city, sex |
4. 列表
列表(List)是非常灵活的数据结构,它的不同元素可以是不同类型(每个元素可以当作一个R中的变量),也可以是不同的长度。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
> 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中的成员:
1 2 |
lst <- lapply(dates, function() {...}, other_arguments) df <- df.rbindList(lst); |
5. 几个矩阵相关操作
(1). cbind()让若干向量以列的方式拼成, rbind()以行(row)
(2). 对矩阵一行/列来赋值
1 2 |
dmat <- matrix(nrow=8, ncol=4) dmat[,2]<-c(1,2,3,4,5,6,7,8) |
(3). 同时对多个向量执行同一个操作
1 |
sapply(veg[, 5:9], FUN=mean) |
(4). 取值形成矩阵
1 2 3 4 5 6 7 8 |
> 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函数可以根据某一列/某一条件来拆分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
> 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用于获得某一向量有序的索引,例如
1 2 |
> 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,例如:
1 2 3 |
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统计学入门》
Pingback: ray bans sunglasses
记得那年,天,正下着小雨,我和他撑着一把伞漫步雨中,他偷偷的看着我,一路无话,等他送我到校门口的时候他扭扭捏捏地从 裤兜里掏出桃红色的信封,就在我快要抱着他大声喊“我爱你”的时候,他说“请把它交给你哥”然后我就腐了…… 一个程序员社区 http://www.1024xyz.com
终于更了啊!!!!!!!!!!