R数据处理

x = c ( 1, 2, 3, 4 )                                
x                                                               
class ( x )                                             

x1 = as.integer ( x )                                   
class ( x1 )                                              # 显示向量x1的数据类型

x = c ( 1, 2, 3, 4 )                                  # 构造元素依次为1,2,3,4的向量x
x==2                                               # 判断向量x中等于2的元素
! ( x<2 )                                         # 判断向量x中大于等于2的元素
which ( x<2 )                                         # 选择向量x中小于2的元素
is.logical ( x )                                      # 判断向量x是否为逻辑性数据

y = c ( "I", "love", "R" )            # 构造元素依次为字符串“I”,“love”,“R”的向量y
y                                                                # 输出y的值
class ( y )                                                # 显示向量y的数据类型
length ( y )                                       # 显示向量y的维度,即元素个数
nchar ( y )                                     # 显示向量y中每个元素的字符个数
y=="R"                                            # 判断向量y中为“R”的元素

#因子型数据,c里面表示有5个数据,levels水平代表特征,labels表示标签
sex = factor ( c(1,1,0,0,1), levels=c(0,1), labels=c("male","female") )  # 设置因子型数据sex
sex                                                             # 输出sex的值
class ( sex )                                                # 显示sex的数据类型
sex1 = factor ( c(1,1,0,0,1), levels=c(0,1), labels=c("female","male") )      # 调换标签(labels)的取值,得到因子型数据sex1
sex1                                                           # 输出sex1的值
sex2 = factor (c(1,1,0,0,1), levels=c(1,0), labels=c("male","female") )  # 调换水平(levels)的取值,得到因子型数据sex2
sex2                                                          # 输出sex2的值
num = factor ( c("a","b","c","d") )                             # 设置因子型变量num
as.numeric ( num )                            # 将因子型数据num转换为数值型数据
num1 = factor ( c("b","a","d","c") )        # 调换num中元素顺序,构造因子型变量num1
as.numeric ( num1 )                          # 将因子型数据num1转换为数值型数据
num + 1                                          # 因子型数据不可进行数值运算
as.numeric ( num ) + 1                            # 转换为数值型数据后可参与运算

library ( MASS )                                  # 加载含有数据集的软件包MASS
data ( Insurance )                                          # 获取数据集Insurance

dim ( Insurance )                                             # 获取数据集的维度
dim ( Insurance[1:10, ] )                            # 获取数据集前10条数据的维度
dim ( Insurance[ ,2:4] )                 # 获取数据集仅含第2、3、4个变量部分的维度
dim ( Insurance ) [1]                     # 获取数据集维度向量的第一个元素,即行数
dim ( Insurance ) [2]                     # 获取数据集维度向量的第二个元素,即列数

vars = c ( "District", "Age" )     # 构造含有“District”和“Age”两个元素的字符向量vars
Insurance [ 20:25, vars ]                 # 筛选出District及Age变量的第20-25行数据
names ( Insurance )                                  # 输出Insurance数据集变量名
head ( names(Insurance), n=2 )                                # 仅输出前2个变量名
tail ( names(Insurance), n=2 )                                # 仅输出后2个变量名
head ( Insurance$Age )                              # 仅输出Age变量前若干条数据

class ( Insurance$District )                                # 显示District的变量类型
class ( Insurance$Age )                                      # 显示Age的变量类型
class ( Insurance$Holders )                                # 显示Holders的变量类型

levels ( Insurance$Age )                                # 显示Age变量的4个水平值
levels ( Insurance$Age) [1]                            # 显示Age变量的第1个水平值
levels ( Insurance$Age ) [1] = "young"        # 将Age变量的第1个水平值修改为“young”
head ( Insurance$Age )                          # 回看修改后Age变量前若干个取值

is.character ( Insurance$Age )                           # 判断Age是否为字符型变量
class ( Insurance$Claims )                                  # 显示Claims的变量类型
class ( as.numeric (Insurance$Claims) )         # 将Claims的数据类型强制转换为数值型


# 抽样技术 #
#这一章节的分层抽样有问题,可采用下面的分层抽样来
######
install.packages("sampling")
library(sampling)
##本例子使用的是R自带的数据集iris
irisData=iris 
##重命名列
names(irisData)=c("萼长","萼宽","瓣长","瓣宽","种类") 
##处理后的数据格式如下所示: 
head(irisData, 3)      
## 划分训练集与测试集用分层抽样函数Strata,在3类型鸢尾花数据中各抽取80%作为训练集,保存在变量TrainingSet中;
## 余下的20%作为测试集,保存在变量TestSet中。过程如下所示: 
##加载 
library(sampling) 
nLevel=round(nrow(irisData)*0.8/3,-1)  
trainingSamp = strata(irisData,stratanames="种类",size = rep(nLevel, 3), method="srswor") 
#以Species变量作为分层变量 
# 分层抽取训练样本,每层nPerLevel个 
trainingSet = getdata(irisData, trainingSamp$ID_unit)  
# 训练集 
testSet = getdata(irisData,-trainingSamp$ID_unit)

#####

#随机有放回的抽取10个元素
sub1=sample(nrow(Insurance),100,replace=T)
Insurance[sub1,]
#随机抽样时附加了权重值,除了最后一个权重为1,其他均为0
sub2=sample(nrow(Insurance),10,replace=T,prob=c(rep(0,nrow(Insurance)-1),1))
Insurance[sub2,]
#默认是不放回,所以会出现错误超出了总数据元素
sub3=sample(nrow(Insurance),nrow(Insurance)+1)

#分层抽样:以District分层,抽取四个层数量为1,2,3,4,抽取的方式是系统抽样
sub4=strata(Insurance,stratanames="District",size=c(1,2,3,4),method="srswor")
sub4
#显示所有数据
getdata(Insurance,sub4)

#description描述各层的信息
sub5=strata(Insurance,stratanames="District",size=c(1,2,3,4),description=TRUE)
sub5
# id  District  ID_unit   Prob    Stratum
# 16    1      16       0.0625       1
#表示序号16被抽出来,第一层,总量为16,抽中的概率为0.0625 = 1/16,

getdata(Insurance,sub5)
# id  District  Group   Age   Holders   Claims
#  1      1      <1l    <25     197       38
#数据的特征中根据Claims的大小来系统抽样,Claims大,抽中的概率就大
sub6=strata(Insurance,stratanames="District",size=c(1,2,3,4),method="systematic",pik=Insurance$Claims)
sub6
getdata(Insurance,sub6)
#整群抽样,抽取其中size两个群,两个群数据全部取出,使用群间特征小,群中特征大的数据抽取
sub7=cluster(Insurance,clustername="District",size=2,method="srswor",description=TRUE)
sub7
#每个群抽中的概率为Prob = 0.5
#sub8出现的概率很少,也运行不了
sub8=mstage(Insurance, stage = c("stratified","stratified"), varnames=c("District","Group"), size=list(c(16,16,16,16),2),description=TRUE)
sub8
getdata(Insurance,sub8) 


#随机无放回的抽样,抽取75%的数据,其中训练集和测试集3:1,并显示维度
train_sub=sample(nrow(Insurance),3/4*nrow(Insurance))
train_data=Insurance[train_sub,]
test_data=Insurance[-train_sub,]
dim(train_data);dim(test_data)

#建立一个数据集T,从T中随机抽取数字作为每层的个体总数
#建立四个层,每层抽取n个样本(本次方案中去n=20)
#假定第1层为均值11,方差为1的正态分布
#假定第2层为均值12,方差为2的正态分布
#假定第3层为均值13,方差为3的正态分布
#假定第4层为均值14,方差为4的正态分布
T<-c(517,814,925,1728,405,512,139,126)
#确定每层样本总量
N1<-sample(T,1)
N2<-sample(T,1)
N3<-sample(T,1)
N4<-sample(T,1)
#确定层权
N<-N1+N2+N3+N4
w1<-N1/N
w2<-N2/N
w3<-N3/N
w4<-N4/N
#确定每层样本数量
n<-20
#开始抽样
y1<-sample(rnorm(N1,11,1),n)
y2<-sample(rnorm(N2,12,2),n)
y3<-sample(rnorm(N3,13,3),n)
y4<-sample(rnorm(N4,14,4),n)
#计算每层平均值
y1bar<-mean(y1)
y2bar<-mean(y2)
y3bar<-mean(y3)
y4bar<-mean(y4)
#——————参数的分层抽样估计
Y1bar<-w1*y1bar+w2*y2bar+w3*y3bar+w4*y4bar;Y1bar
a<-N*N
varY1<-(N1*(N1-n)*var(y1)/n+N2*(N2-n)*var(y2)/n+N3*(N3-n)*var(y3)/n+N4*(N4-n)*var(y4)/n)/a;varY1
#——————参数的简单随机抽样估计
Y2<-c(y1,y2,y3,y4)
f<-(4*n)/N
Y2bar<-mean(Y2);Y2bar
varY2<-(1-f)*var(Y2)/(4*n);varY2

猜你喜欢

转载自blog.csdn.net/OYY_90/article/details/82315193