搜索
查看: 1027|回复: 0

[R] R语言实战 第五章 上

[复制链接]

31

主题

36

帖子

1175

积分

金牌会员

Rank: 6Rank: 6

积分
1175
发表于 2018-12-23 17:33:47 | 显示全部楼层 |阅读模式
## 高级数据管理

# 数值和字符处理
# 数学函数
[AppleScript] 纯文本查看 复制代码
ceiling() # ceiling(x) 返回不小于x的最小整数

floor() # floor() 返回不大于x的最大整数

round() # round(x, digits = n) 将x舍入为指定位的小数

round(3.75, digits = 1)
[attach]3471[/attach]
signif() # signif(x, digits = n)  将x舍入为指定的有效数字位数

signif(3.475, digits = 2)

log() # log(x, base = n) 对x取以n为底的对数

round signif.png
# 统计函数
mad() # 绝对中位差 查
?mad

diff() # diff(x, lag = n) 滞后差分,lag用以指定滞后几项,默认的lag为1
[AppleScript] 纯文本查看 复制代码
x <- c(1, 5, 23, 29)

diff(x) 


# 概率函数
# 设定随机数种子——R中生成的都是伪随机
# 指定set.seed ,使结果可以重现
# 例- 生成服从正态分布的伪随机数
[AppleScript] 纯文本查看 复制代码
runif(5)

runif(5)

set.seed(123)

runif(5)

set.seed(123)

runif(5)

reproduce rnif setseed.png
# 生成多元正态数据
# 调用MASS包中的mvrnorm()
[AppleScript] 纯文本查看 复制代码
library(MASS)

mvrnorm() # mvrnorm(n, mean, sigma) 

          # n为想要的样本大小,mean为均值向量, sigma是方差-协方差矩阵(或相关矩阵)
# 例-生成服从多元正态分布的数据
[AppleScript] 纯文本查看 复制代码
options(digits = 3)

set.seed(1234)



mean <- c(230.7, 146.7, 3.6)

sigma <- matrix(c(15360.8, 6721.2, -47.1,

                  6721.2, 4700.9, -16.5,

                  -47.1, -16.5, 0.3), nrow = 3, ncol = 3)

mydata <- mvrnorm(500, mean, sigma)

mydata <- as.data.frame(mydata)

names(mydata) <- c('y', 'x1', 'x2')

dim(mydata)

head(mydata, n = 10)


# 字符处理函数
nchar() # 计算x中的字符数量
[AppleScript] 纯文本查看 复制代码
x <- c('ab', 'cde', 'fghij')

length(x)

nchar(x[3])

substr() # substr(x, start, stop) 提取或替换一个字符向量中的子串

x <- 'abcdef'

substr(x, 2, 4)

substr(x, 2, 4) <- '22222'
[attach]3472[/attach]
x


strsplit(x, split, fixed = F) # 在split处分割字符向量x中的元素,若fixed = F,则
                              # pattern为一个正则表达式,若fixed = T, 则pattern为一个字符串
[AppleScript] 纯文本查看 复制代码
y <- strsplit('abcd', '')

y

unlist(y)


paste(..., sep = ) # 连接字符串,分隔符为sep
[AppleScript] 纯文本查看 复制代码
paste('x', 1:3, sep = '')

paste('x', 1:3, sep = 'M')


grep() # x中搜索某种模式, 若fixed = F, 则pattern为一个正则表达式,
       # 若fixed = T,则pattern为一个文本字符串,返回值为匹配的下标
[AppleScript] 纯文本查看 复制代码
grep('A', c('b', 'A', 'c'), fixed = T)
[attach]3467[/attach]
grep('A', c('b', 'A', 'c'), fixed = F)



rep(x, n) # 将x重复n次
[attach]3468[/attach]
y <- rep(1:3, 2)

y

cut(x, n) # 将连续变量x分割为有着n个水平的因子


pretty(x, n) # 创建美观的分割点,通过选取n+1个等间距的取整值,将连续变量x分割为n个区间

cat(..., file = , append = F) # 连接...中的对象,将其输出到屏幕上或文件中
firstname <- 'Jane'
cat('Hello', firstname, '\n')
#  \n 表示新行,\t为制表符,\'为单引号, \b 为退格

name <- 'Bob'
cat('Hello', name, '\b.\n',  'Isn\'t R', '\t', 'Great?\n')

## 将函数运用到矩阵和数据框
[AppleScript] 纯文本查看 复制代码
apply(x, margin, fun, ...) # x为数据对象,margin是维度下标,1是行,2是列

mydata <- matrix(rnorm(30), nrow = 6)

mydata

apply(mydata, 1, mean)


#
[AppleScript] 纯文本查看 复制代码
rm(list = ls())

options(digits = 2)

student <- c('john davis', 'angela williams', 'bullwinkle moose', 

             'david jones', 'janice markhammer', 'cheryl cushing',

             'reuven ytzrhak', 'greg knox', 'joel england',

             'mary rayburn')

math <- c(502, 600, 412, 358, 495, 512, 410, 625, 573, 522)

science <- c(95, 99, 80, 82, 75, 85, 80, 95, 89, 86)

english <- c(25, 22, 18, 15, 20, 28, 15, 30, 27, 18)

roster <- data.frame(student, math, science, english,

                     stringsAsFactors = F

                     )

z <- scale(roster[,2:4])

score <- apply(z, 1, mean)

roster <- cbind(roster, score)



y <- quantile(score, c(.8, .6, .4, .2))

y

roster$grade[score >= y[1]] <- 'A'



roster$grade[score < y[1] & score >= y[2]] <- 'B'

roster$grade[score < y[2] & score >= y[3]] <- 'C'

roster$grade[score < y[3] & score >= y[4]] <- 'D'

roster$grade[score < y[4]] <- 'F'

View(roster)



name <- strsplit((roster$student), ' ')

lastname <- sapply(name, '[', 2)

lastname

firstname <- sapply(name, '[', 1)

?'['

roster <- cbind(firstname, lastname, roster[,-1])

roster

roster <- roster[order(lastname, firstname),]

roster





上一篇:R语言实战 第四章
下一篇:R语言实战 第五章 下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树 ( 粤ICP备15016384号  

GMT+8, 2019-11-21 02:12 , Processed in 0.036238 second(s), 30 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.