R--高级数据管理

数学函数

#round(x,digits=n)小数位数,signif(x,digits=n)有效数字位数,trunc()直接去除小数
#log(x,base=n)对x取以n为底的对数

#统计函数
#sd(x)标准差,range(x)求值域,diff(x,lag=n)求滞后差分,
#scale(x,center=TRUE,scale=TRUE)对数据对象x进行中心化或者标准化
#进行任意均值和方差的标准化
#对矩阵或者数据框
newdata <- scale(mydata)
newdata <- scale(mydata)*SD+M
#SD标准差,M均值
#对某一列进行标准化
newdata <- transform(mydata,myvar=scale(myvar)*10+50)

x <- c(1,2,3,4,5,6,7,8)
mean(x)
sd(x)

n <- length(x)
meanx <- sum(x)/n
css <- sum((x-meanx)^2)
sdx <- sqrt(css/(n-1))
meanx
sdx```

#概率函数

生成-3到3的31个值的序列

x <- pretty(c(-3,3),30)

密度函数d的正态分布norm

y <- dnorm(x)

yaxs表示y轴的画轴方法,i表示刻度线都在数据范围内部

plot(x,y,type="l",xlab="NormalDeviate",ylab = "Density",yaxs="i")

通过指定随机数种子,可以再现以前的结果

set.seed(1234)

runif()函数生成0到1之间的均匀分布的随机数

runif(5)

生成多元正态数据

library(MASS)
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)

mvrnorm produces one or more samples from the specified multivariate normal distribution

500是想要的样本大小,返回结果是一个矩阵

mydata <- mvrnorm(500,mean,sigma)

转化成数据框

mydata <- as.data.frame(mydata)
names(mydata) <- c("y","x1","x2")
dim(mydata)
head(mydata,n=10)```

字符处理函数

#paste()连接字符串,分隔符为seq
paste("x",1:3,"a",sep = "_")
#rep(x,n)将x重复n次,将1:3这个向量重复两次
y <- rep(1:3,2)
#将选取n+1个等间距的整数值,将一个连续型变量x分隔成n个区间,画图常用
pretty(c(-3,3),30)

#将函数应用于矩阵和数据框
a <- 5
sqrt(a)
b <- c(1.243,5.345,2.99)
round(b)
c <- matrix(runif(12),nrow=4)
c
log(c,base = 2)
mean(c)

#apply()函数,可以将任意函数应用到矩阵,数组,数据框的任何维度上
#apply(x,MARGIN,FUN),MARGIN=1表示行,MARGIN=2表示列
apply(c,1,mean)
#按列计算均值
apply(c,2,mean)
#计算截尾均值,基于中间20%的数据,最高和最低的40%将被忽略
apply(c,2,mean,trim=0.4)```

#处理学生成绩

包括成绩变量的标准化,给出评分,名字排序

options(digits = 2)
Student <- c("John Davis","Angela Williams","Bullwinkle Moose","Kevin Du","Janice MarkHammer",
"Cheryl Cushing","Reuven Ytzrhak","Greg Knox","Joel England","Mary Rayburn")
Math <- c(502,600,412,634,495,512,410,625,573,522)
Science <- c(95,99,80,98,75,85,80,95,89,86)
English <- c(25,22,18,26,28,15,30,27,18,15)
roster <- data.frame(Student,Math,Science,English,stringsAsFactors = FALSE)

scale进行数据的标准化,针对每一列

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

对每一行求平均值

score <- apply(z,1,mean)

然后将score列和roster合并,横向合并,添加列

roster <- cbind(roster,score)

计算分位数,0.8等作为分位点

y <- quantile(score,c(0.8,0.6,0.4,0.2))

建立新变量,score >= y[1]将返回一个logical向量,变量的重编码

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"

开始处理学生姓名

strsplit函数分割字符向量x中的元素,返回一个列表,有10个成分,每个有两项

name <- strsplit((roster$Student)," ")

"["也是个函数,"["(x,2)表示提取x向量中的第二个元素

lastname <- sapply(name,"[",2)
firstname <- sapply(name,"[",1)

roster[,-1]表示去除第一列

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

order返回一个排序后的行索引值向量

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

roster <- roster[order(-score),]```

程序控制结构

for(i in 1:10) print("hello world")
i<-10
while(i>0){print("hello");i<-i-1}
grade <- "love"
if(!is.factor(grade)) grade<-as.factor(grade) else print("grade is already a factor")
#ifelse结构
score<-4
ifelse(score>2,print("passed"),print("failed"))
outcome <- ifelse(score > 2,"passed","failed")
#switch结构
#根据i的值,选择后面执行哪条语句
fellings <- c("sad","afraid")
for(i in fellings)
  print(
    switch(i,
           happy="i am glad you are happy",
           afraid="there is nothing to fear",
           sad="cheer up",
           angry="calm down now")
  )```

#函数

mystats <- function(x,parametric=TRUE,print=FALSE){
if(parametric){
#参数统计量,均值和标准差
center <- mean(x);
spread <- sd(x);
}else{
#非参数统计量,中位数和绝对中位差
center <- median(x);
spread <- mad(x);
}
if(print & parametric){
cat("Mean=",center,"\n","SD=",spread,"\n")
}else if(print & !parametric){
cat("Median=",center,"\n","MAD=",spread,"\n")
}

生成一个列表,name1=object1

result <- list(center=center,spread=spread)
return(result)
}
set.seed(1234)

Density,distribution function,quantile(分位数)function and random generation for the normal

distribution with mean equal to mean and standard deviation equal to sd.

x<-rnorm(500)
y <- mystats(x)

返回的y是一个列表

y$center;y$spread;y[1];y[2]
y <- mystats(x,parametric = TRUE,print = TRUE)
y```

一个switch函数

mydate <- function(type="long"){
  switch(type,
         #%A是非缩写星期名,%B非缩写月份
         long = format(Sys.Date(),"%A %B %d %Y"),
         short = format(Sys.Date(),"%Y-%m-%d"),
         cat(type,"is not a recognized type\n")
  )
}

mydate("long")
mydate("short")
mydate("middle")```

#转置矩阵

cars <- mtcars(1:5,1:4)
t(cars)```

整合数据

options(digits = 3)
attach(mtcars)
#将数据折叠(整合),by中的变量必须在list中,哪怕只有一个变量,函数可以使用自定义函数
aggdata <- aggregate(mtcars,by=list(Group.cyl=cyl,Group.gear=gear),FUN = mean,na.rm=TRUE)
aggdata
detach(mtcars)```
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容