分享

30天学会R DAY9:变量添加及转化

 妙趣横生统计学 2019-12-08


 数据集整理(4 变量的添加及转化

日常数据整理需要添加变量,对变量进行计算转化。本章将给大家介绍在数据集对原变量进行计算并添加变量及对原变量的数据进行转化。

开始之前,我们先读入elder1elder2两个文件

elder1<-read.csv("elder1.csv")

elder2<-read.csv("elder2.csv")

添加变量

数据集$变量<-原变量语句 $后面是新的变量名原变量语句是对于原变量转化方式

transform(数据集,新变量名1=原变量转化方式,新变量名2=原变量转化方式)  原变量运算是可以对多个原变量进行计算。

方法一 数据集$新变量<-原变量语句 每次只能添加一个变量

elder1$SBP1<-elder1$SBP #SBP变量直接复制成新变量SBP1

elder1$SBP1<-elder1$SBP>140 #生成新变量SBP1,变量值是逻辑符,TRUE FALSE

elder1$SBP1<-as.numeric(elder1$SBP) #day8已经介绍,改变量属性也可以添加变量

elder1$bmi<-elder1$weight/elder1$height/elder1$height*10000   #对原变量 ,生成新变量,需要在变量名前加上数据集,R不能直接识别变量名。

每个变量名前都编写数据集名,比较麻烦,可以使用attach语句,少代码编写

attach(数据集)  绑定数据集,后续变量名编码可以不用带上数据

detach(数据集) 解绑,如果要分析其它数据集的变量,需要对绑定的数据集解绑。

attach(elder1)   #绑定elder1数据

elder1$bmi<-weight/height/ height *10000  #weight,height前就不需要编写elder1$数据集

class(elder1$bmi)    #bmi变量的属性

[1] "numeric"

detach(elder1)  #解除绑定,很重要,不然分析其它数据集会错误

方法二 transform(数据集,新变量名1=原变量转化方法,新变量名2=原变量转化方式) 可同时生成多个新变量

elder1<-transform(elder1, SBPD=elder1$SBP-140,

bmi=elder1$weight/elder1$height/elder1$ height *10000)    #生成SBPD bmi变量。

names(elder1)

[13] "SBPD"   "bmi"  1314个变量是SBPDbmi

attach(elder1)   #绑定elder1数据

elder1<-transform(elder1, SBPD= SBP-140, bmi= weight/ height/ height *10000)

names(elder1)

[13] "SBPD"   "bmi"  1314个变量是SBPDbmi

detach(elder1)

二、变量值的转化

数据集$新变量[数据集$原变量转化方式] 如果前后两个变量名不同,生成新变量;变量名相同,在原变量上进行修改。

within(数据集,{新变量名[原变量转化方式]<-新变量值})  

方法一 数据集$新变量[数据集$原变量转化方式] 采用多命令方式才能完成变量值的转化

在原变量上进行转化

attach(elder1)

elder1$SBP1<-SBP   #复制变量SBP,生成新变量SBP1,防止原数据被覆盖丢失

elder1$SBP1[SBP1>=160]<-NA  #SBP>=160为异常值,当缺失值处理。

elder1$SBP1[SBP1<90]<-1

elder1$SBP1[SBP1>=90 & elder1$SBP<=140]<-2

elder1$SBP1[SBP1>140]<-3 #设置多命令函数时,需从低到高排列,命令语句不能打乱。

elder1$SBP1<-as.factor(elder1$SBP1)

levels(elder1$SBP1)

[1] "1" "2" "3"  SBP2变量值有123三个水平

detach(elder1)

转化后生成新变量

attach(elder1)

elder1$SBP1[SBP>=160]<-NA  #SBP>=160为异常值,当缺失值处理。

elder1$SBP1[SBP<90]<-1

elder1$SBP[SBP>=90 & elder1$SBP<=140]<-2

elder1$SBP1[SBP>140]<-3  #命令的顺序可以打乱

elder1$SBP1<-as.factor(elder1$SBP1) #SBP1转化成因子

levels(elder1$SBP1) #查看因子水平

[1] "1" "2" "3"  SBP2变量值有123三个水平

detach(elder1)

方法二 within(数据集,{新变量名[原变量转化方式]<-新变量值}) 单命令方式 within中原变量条件顺序可打乱

elder1 <- within(elder1,{

 SBP1[SBP>=160]<-NA

  SBP1[SBP>=140& SBP<160] <-1

  SBP1[SBP<140 & SBP>=90] <- 2

  SBP1[SBP<90] <- 3})   #SBP1为新生成的变量,SBP旧的变量

elder1$SBP1<-as.factor(elder1$SBP1)

levels(elder1$SBP1)

[1] "1" "2" "3"  SBP1变量值有123三个水平

DAY9的内容就介绍到这里!

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多