第九天 数据集整理(4): 变量的添加及转化
日常数据整理需要添加变量,对变量进行计算转化。本章将给大家介绍在数据集对原变量进行计算并添加变量及对原变量的数据进行转化。
开始之前,我们先读入elder1、elder2这两个文件
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" 第13,14个变量是SBPD,bmi
attach(elder1) #绑定elder1数据
elder1<-transform(elder1, SBPD= SBP-140, bmi= weight/ height/ height *10000)
names(elder1)
[13] "SBPD" "bmi" 第13,14个变量是SBPD,bmi
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变量值有1,2,3三个水平
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变量值有1,2,3三个水平
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变量值有1,2,3三个水平
DAY9的内容就介绍到这里!
联系客服