r数据yi

1.选择数据,(1)可使用中括号,第一项为行(行号),第二项为列(列号)。行可设置为筛选条件(==作为筛选也可以用which(==)),列可用c函数或:连接选择多列。

setosa.data=iris[1:5,c('Sepal.Length','Sepal.Width')]

(2)subset函数来查。参数,第一个为数据集,第二个参数为条件,选择行,第三参数select=是选择列。

ex.data=subset(iris,petal.length<=1.4 & petal.width>=0.2,select=Species)

2.合并数据,将两个具有相同列或行的数据框合并为一个,合并后列名为species.

flower.type=data.frame(species='setosa',flower='iris')

merge(flower.type,iris[1:3,],by='species')

3.数据排序。返回指定列进行数据排序后的数据框。

iris[order(iris$sepal.length,decreasing=TRUE),]

4.统计计算。对数据框的每个数值型属性进行汇总统计,使用sapply函数。

sapply(iris[1:4],mean,na.rm=TRUE)#忽略缺失值

cor(iris[,1;4]);cov(iris[,1;4]);cor.test(),t.test()

计算不同组数据的聚合汇总统计,使用aggregate和reshape函数来计算数据子集的汇总统计。

aggregate(x=iris[,1:4],by=list(iris$species),FUN=mean)

library(reshape)

iris.melt=melt(iris,id='species')

cast(Species~variable,data=iris.melt,mean,subset=Species %in% c('setosa','versicolor'),magins='grand_row')

#合并加去重

#附加, 横或竖合并数据: append,cbind,rbind 
x=1:10;x;x[12]=3;x
(x1=append(x,77,after=5))#在第五个之后,即第6个是77
cbind(1:5,rnorm(5))
rbind
(1:5,rnorm(5))
(x=rbind(1:5,runif(5),runif(5),1:5,7:11))
x[!duplicated(x),]#去掉矩阵重复的行

unique(x)#和上一个用法一样,返回的也是不同行的矩阵

#tapply对列表进行计算,apply对矩阵进行计算列联表,可绘制马赛克图

ftable=table(Sex, Age) 

mosaicplot(ftable,color=TRUE)

chisq.test(ftable)###皮尔森卡方检验,用于发现两个类别变量之间是否存在某种关联,大数据中非成组信息的检验。包含两个或两个以上独立数据组。原假设是变量1和变量2相互独立。p值小于0.05,说明不独立。


tapply(Days, Age, mean)#按照age对天数求均值

tapply(Days, list(Sex, Age), mean)#按照age、sex对天数求均值

na.omit(airquality)#删去缺失值的数据

#添加分类新变量

cars$qspeed=cut(cars$speed, breaks=quantile(cars$speed),include.lowest = TRUE) #增加一个定性变量qspeed, 以四分位点为分界(四分位点计算:i(n+1)/4,离谁近,权数大,q1=0.25*第十二项+0.75*第十三项)

names(cars) #数据cars多了一个变量(可以把每一行数据放到一类里面,求三个分位点,把数据分为四类)

plot(dist ~ qspeed, data = cars)#连续和分类变量可以画出箱线图

(a=lm(dist ~ qspeed, data = cars))#拟合线性模型(简单最小二乘回归)

abline(a,col="red")#或者abline(lm(y~x),col="red")在散点图上加拟合直线

summary(a)#回归结果(包括一些检验)

sum(x);length(x)#元素和及向量元素个数

fivenum(x)     # 五数汇总, quantiles

quantile(x)    # 分位点 quantiles (different convention)有多种定义

quantile(x, c(0,.33,.66,1))

(a=factor(letters[1:10])) #letters为小写字母的向量, LETTERS为大写字母
a[3]="w"          #不行! 会给出警告,把w赋值给a[3]
a=as.character(a) #转换一下
a[3]="w"          #可以了
a;ss=factor(a)       #两种不同的类型[1] a b w d e f g h i j
                              #Levels: a b d e f g h i j w
levels(ss);nlevels(ss)#(查看分类个数)(factor是将字符向量变为分类变量,也可以将数值类型变为分类变量

as.numeric(f)#将分类化为数值

(z=seq(10,-1,-0.1))#10到-1间隔为-0.1的序列

(x=rep(1:3,3))  #三次重复1:3

(x=rep(3:5,1:3))#3 4 4 5 5 5

(x=rep(c(1,10),c(4,5)))#11 1 1 10 10 10 10 10

x=matrix(rnorm(24),4,6);x

x[x[,1]>0,1] #第1列大于0的元素

sum(x[,1]>0) #第1列大于0的元素的个数

x[,-c(1,3)]#没有第1、3列的x.

diag(1:5) #以1:5为对角线,其它元素为0的对角线矩阵

diag(5) #5维单位矩阵(对角为1,其他为0)

###画图

x=seq(-3,3,len=20);y=dnorm(x)#产生数据
w= data.frame(x,y)#合并x,y,成为数据w
par(mfcol=c(2,2))#准备画四个图的地方
plot(y ~ x, w,main="正态密度函数")
plot(y ~ x,w,type="l", main="正态密度函数")#实线不加点
plot(y ~ x,w,type="o", main="正态密度函数")#加点
plot(y ~ x,w,type="b",main="正态密度函数")#虚线

par(mfcol=c(1,1))#取消par(mfcol=c(2,2))

plot(1,1,xlim=c(1,7.5),ylim=c(0,5),type="n") #画出框架

#在plot命令后面追加点用points()(如要追加线可用lines()函数):

points(1:7,rep(4.5,7),cex=seq(1,4,l=7),col=1:7, pch=0:6)
text(1:7,rep(3.5,7),labels=paste(0:6,letters[1:7]),cex=seq(1,4,l=7),
col=1:7)#在指定位置加文字
points(1:7,rep(2,7), pch=(0:6)+7)#点出符号7到13
text((1:7)+0.25, rep(2,7), paste((0:6)+7))#加符号号码
points(1:7,rep(1,7), pch=(0:6)+14) #点出符号14到20
text((1:7)+0.25, rep(1,7), paste((0:6)+14)) #加符号号码



plot(Sepal.Length,Sepal.Width,type="l")#(描点,连线)
plot(Species)#plot是泛型函数,会根据输入自动调整输出。(条形图,每种分类的频数)
plot(Species,Sepal.Length);boxplot(Sepal.Length~Species)#箱线图,显示分类变量中数值变量的中位数
#指数分布E(0.5)
x=seq(0,10,len=1000)
y=dexp(x,0.5)
plot(y~x,ty="l",xlab="商品",ylab="销量")#(纵轴是0~0.5,横轴是0~10)
##lines是可以加到plot上的
xx=seq(2,10,len=1000)
yy=dexp(xx,0.5)
lines(xx,yy,ty="h",col="pink")#(纵轴是0~0.5,横轴是0~10,粉红色是从2~10)
#三维图像
z=cos(y)/(1+x^2)
x=seq(-2,2,len=100)
y=seq(-pi,pi,len=100)
z=function(x,y) cos(y)/(1+x^2)
z=outer(x,y,z)
persp(x,y,z,theta=30,phi=30,expand=0.7,col="pink")
#第一个角度仰角,左右转,拉扁拉宽
#双纵轴
drunkenness <- ts(c(3875, 4846, 5128, 5773, 7327, 
                    6688, 5582, 3473, 3186,
                    rep(NA,51)),
                  start=1912, end=1971)
drunkenness
# Have to copy-and-paste to shrink the mtext text (arggh!)
par(mar=c(3, 6, 2, 4))
plot(drunkenness, lwd=3, col="gray", ann=FALSE, las=2)
mtext("Drunkenness\nRelated Arrests", side=2, line=3.5, cex=0.7)
par(new=TRUE)
plot(nhtemp, ann=FALSE, axes=FALSE)
mtext("Temperature (F)", side=4, line=3, cex=0.7)
title("Using par(new=TRUE) or par(usr=...)")
axis(4)

par(new=FALSE)

#饼状图、柱状图、直方图

attach(cars);head(cars)
barplot(speed)#是不对的。
barplot(table(speed))#画向量,分类变量的柱状图
barplot(table(speed)/length(speed)) #比例图(和上图形状一样)
table(speed)/length(speed)
hist(speed)#统计连续变量范围内的频数
cars
hist(cars$dist,prob=T,breaks=20,ylim=c(0,0.04))
#ggplot2
qplot函数很重要画出分类曲线。
x=1:4;y=c(4,4,4,6)
plot(y~x,ty="b",ylim=c(2,7))
for(i in 1:4){
         text(i,y[i]+0.1,y[i])      
              }

##检测缺失值;计算缺失比例(计算的是age这一列)

sum(is.na(train.data$Age)==TRUE);sum(is.na(train.data$Age)/length(train.data$Age)

##用sapply函数来计算所有属性缺失值的比例

sapply(train.data,function(df){

                         sum(is.na(df)==TRUE)/length(df) ;

                                       })

##用Amelia包对缺失数据进行可视化处理。

install.packages("Rcpp");library(Rcpp);install.packages("Amelia");library(Amelia);

#使用missmap函数绘制缺失值示意图

missmap(train.data,main="missing map")

#插补缺失值

train.data$x1[which(is.na(train.data$x1))]='s'

table(train.data$x1,useNA="always")

###可视化数据精华

(1)分类变量的频数画图

barplot(table(train.data$Survived),main="Passenger Survival",names=c("Perished","Survived")#画向量,分类变量的柱状图(2)分类变量在分类变量的的分布画图

##棘状图barplot什么样性别的乘客在沉船事故中丧生概率更大;船舱等级是否对逃生概率有影响等这些问题。

counts=table(train.data$Survived,train.data$Sex)

barplot(counts,col=c("darkblue","red"),legend=c("Perished","Survived"),main="passenger survived by sex")

#多分类变量的关联,还可以用vcd包中的mosaicplot函数。

mosaicplot(train.data$Sex~train.data$Survived,main="lalal",color=TRUE,xlab="Sex",ylab="Survived")

##连续变量(年龄)在分类变量是死还是活上的直方图对比。

hist(train.data$Age[which(train.data$Survived=='0')],main="lallala",xlab="Age",ylab="Count",col="blue",breaks=seq(0,80,by=20))

hist(train.data$Age[which(train.data$Survived=='1')],col="red",add=T,breaks=seq(0,80,by=20))

(4)两个连续变量的散点图随着分类变量的变化。coplot()函数在散点图的基础上,加入了一至两个因子,可以做出散点图随因子变化的情况。首先考虑一个因子的情况,有a、b、c三个变量,现在是想考察变量a和变量b是如何根据作为变量c的变化而变化的,等同于把c看做是因子变量

coplot(Sepal.Width~Sepal.Length|Species)#(不同分类下,length为横轴的三个散点图)

(5)#箱线图,显示分类变量中数值变量的中位数

plot(Species,Sepal.Length);boxplot(train.data$Age~train.data$Survived,xlab="Survived",ylab="Age")

(6)双纵轴例子,

y1=data.frame(t,v1)
y2=data.frame(t,x1)
y3=data.frame(t,v2)
y4=data.frame(t,x2)
par(mfcol=c(2,1))#布置2行一列的两个图。退出用par(mfcol=c(1,1))
par(mar=c(3, 6, 2, 4))
plot(y1, lwd=0, col="blue", ann=FALSE, las=1)
mtext("定速速度", side=2, line=3.5, cex=1)
par(new=TRUE)#继续往图上加图退出用par(new=FALSE)
plot(y2, ann=FALSE, axes=FALSE)

mtext("定速距离", side=4, line=2, cex=1)

title("定速时时间与速度和距离的曲线图")

axis(4)

par(new=FALSE)

(7)词云图

library(rJava)
library(Rwordseg)
library(RColorBrewer)
library(wordcloud)
library(wordcloud2)
textseg = read.csv("C:/Users/Administrator/Desktop/背景.txt",header=F)
wordfre = NULL
for (i in 1:dim(textseg)[1]){
 textsegment=as.character(textseg[i,])
 seg = segmentCN(textsegment)
 wordfre=c(wordfre,seg)
                             }
word.frequent = table(wordfre)
WORD.frequent = as.data.frame(word.frequent)
lenword = apply(WORD.frequent,1,nchar)
WORD.frequent = WORD.frequent[lenword[1,]!=1,]
WORD.frequent_sort = sort(WORD.frequent[,2],decreasing=T,index.return=T)
set.seed(100)
wordcloud(WORD.frequent$wordfre[WORD.frequent_sort$ix[1:100]],
          WORD.frequent_sort$x[1:100],random.order=F,
          colors=colors(7))




wordcloud(WORD.frequent$wordfre[WORD.frequent_sort$ix[1:100]],
          WORD.frequent_sort$x[1:100],random.order=T,colors=colors(7))

wordcloud2(demoFreq,shape='')

#决策树分类(例子为条件推理树)

#先构建划分函数用其他算法也可以用

split.data=function(data,p=0.7,s=666){

           set.seed(s)

index=sample(1;dim(data)[1])

train=data[index[1:floor(dim(data)[1]*p)],]

test=data[index[((ceiling(dim(data)[1]*p))+1):dim(data)[1]],]

return(list(train=train,test=test))

   }

#划分训练数据集和测试数据集train.data是上节用过的一个数据集,不要和训练数据集搞混。

allset=split.data(train.data,p=0.7)

trainset=allset$train

testset=allset$test

##加载相关包。

install.packages("party")

require("party")

train.ctree=ctree(Survived~sex+age+....,data=train.set);train.ctree

plot(train.ctree)#从决策树结果中可看出结果

###支持向量机svm

install.packages("e1071")

require(e1071)

svm.model=svm(Survived~sex+age+....,data=train.set,probablity=TRUE)

##模型评估混淆矩阵

ctree.predict(train.ctree,testset)

##安装和导入caret包(还可以进行数据分别,普通预处理,构建哑变量,训练使用交叉验证,常规可视化)

install.packages("caret)

require(caret)

confusionMatrix(ctree.predict,testset$Survied)#看准确度,还可以进行属性调优,或改用glm,随机森林等形成更好的模型。

#使用roc曲线,反映正确预测率和错误预测率之间的关系,曲线下面积越大,即越接近1,模型预测准确度越高。说明简单的条件推理树可以非常好的预测出乘客的逃生概率。

#相关系数矩阵的热力图

library(reshape2)

qplot(x=Var1,y=Var2,data=melt(cor(mtcars[1:3])),fill=value,geom="tile")

#单样本t检验原假设是两个均值是否存在差异,双样本t检验是两个独立的数据集是否不同。

###检验数据正态性,shapiro-wiks检验,p值大于0.05,表示服从正态分布。

单样本k-s检验,p值小于0.05,表示服从正态分布。双样本k-s检验,p值大于0.05,表示两个数据集可能服从同一分布。

wilcoxon检验,不需要两个样本空间为正态分布时,测试表示两个数据集是否服从同一分布。
























你可能感兴趣的:(R存储,r)