2.R的数据的分类

#####2.2.2 R的数据的分类#####

#1. numeric数值型
x = c(1,2,3,4)
x
class(x) #显示向量的数据类型

#2. integer整数型
x1 = as.integer(x) #将x转化为整数型数据x1
class(x1)

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

#4. character/string字符型
y=c("I","love","R")
y
class(y)
length(y) #显示向量y的维度,即向量的个数
nchar(y)  #显示向量y中每个元素的字符个数
y=="R"    #判断向量y中为“R"的元素

#5. factor因子型
#简单来说就是披着定量数据外壳的定性数据,即以数字代码形式表现的字符型数据,本质上也为定性数据
sex=factor(c(1,1,0,0,1),levels=c(0,1),labels=c("male","female")) #设置因子型数据sex
sex
class(sex)
sex1=factor(c(1,1,0,0,1),levels=c(0,1),labels=c("female","male")) #调换标签(labels)的取值,得到因子型数据sex1
sex1
sex2=factor(c(1,1,0,0,1),levels=c(1,0),labels=c("male","female")) #调换水平(levels)的取值,得到因子型数据sex2
sex2

num = factor(c("a","b","c","d")) #设置因子型变量num
as.numeric(num)                  #将因子型数据num转换为数值型数据
num1 = factor(c("b","a","d","c"))
as.numeric(num1)
#num+1    因子型数据不可进行数值运算
as.numeric(num)+1 #转换为数值型数据后可参与运算

#####2.2.3 用R简单处理数据#####
#1. 基本信息
library(MASS)    #加载含有数据集的软件包MASS
data(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变量前若干条数据

#2. 变量类型
class(Insurance$District)
class(Insurance$Age)
class(Insurance$Holders)

levels(Insurance$Age)  #显示Age变量的4个水平值
levels(Insurance$Age)[1] #显示Age变量的第1个水平值
levels(Insurance$Age)[1]="young" #将Age变量的第1个水平值修改为"young"
head(Insurance$Age)

is.character(Insurance$Age)   #判断Age是否为字符型变量

class(Insurance$Claims)
class(as.numeric(Insurance$Claims)) #将Claims的数据类型强制转换为数值型

#####2.3 数据抽样及实现#####

#####2.3.1 简单随机抽样#####
#sample(x, size, replace = FALSE, prob = NULL)
#其中x表示待抽取对象,一般以向量形式表示;size为非负整数,表示想要抽取样本的个数;
#replace表示是否为可放回抽样,默认情况下为无放回;prob用于设置各抽取样本的抽样概率,
#默认情况下为无取值,即等概率抽样。

#1. 有放回的随机抽样
sub1=sample(nrow(Insurance),10,replace=T) #从Insurance的总观测数中有放回随机抽取10个行序号
sub1
Insurance[sub1,] #输出抽取到的10条观测样本

sub2=sample(nrow(Insurance),10,replace=T,prob=c(rep(0,nrow(Insurance)-1),1)) 
                             #设置除最后一条样本的抽样概率为1外,其他样本被抽到的概率为0
sub2
Insurance[sub2,]

#2. 无放回的随机抽样
sub3=sample(nrow(Insurance),nrow(Insurance)+1)  #错误的,无放回中size的取值不可以超过x的长度

#####2.3.2 分层抽样#####
library(sampling)
sub4=strata(Insurance,stratanames="District",size=c(1,2,3,4),method="srswor")
              #按街区District进行分层,且1-4街区中分别无放回抽取1-4个样本
sub4
getdata(Insurance,sub4) #获取分层抽样所得的数据集

sub5=strata(Insurance,stratanames = "District",size=c(1,2,3,4),description = TRUE)
              #按街区District进行分层,且1-4街区中分别无放回抽取1-4个样本
              #并输出由description控制的各层基本信息

sub6=strata(Insurance,stratanames="District",size=c(1,2,3,4),method="systematic",
            pik=Insurance$Claims)
sub6  #选择系统抽样方法systematic,并以Insurance中Claims变量控制各层内的抽样概率
getdata(Insurance,sub6)

#####2.3.3 整群抽样#####
sub7=cluster(Insurance, clustername = "District", size=2, method="srswor",
             description = TRUE)
#按照District变量的不同取值划分群,并无放回的抽取其中两个群的所有样本
sub7
getdata(Insurance,sub7)

#####2.4 训练集与测试集#####
train_sub=sample(nrow(Insurance), 3/4*nrow(Insurance)) #随机无放回抽取3/4样本行序号
train_data=Insurance[train_sub,] #将相应3/4行序号对应样本构造出训练集
test_data=Insurance[-train_sub,] #将另外1/4行序号对应样本构造出训练集
dim(train_data);dim(test_data)   #显示训练集与测试集的维度




猜你喜欢

转载自blog.csdn.net/qq_39124646/article/details/83214616
今日推荐