R语言变量重编码、重命名的操作

时间:2021-05-20

1、变量重编码

重编码涉及根据同一个变量和/或其他变量的现有值创建新值的过程,如将符合某个条件的值重新赋值等,这里主要介绍两种常见的方法:

#第一种方法per <- data.frame(name = c("张三","李四","王五","赵六"), age = c(23,45,34,1000))perper$age[per$age == 1000] <- NA #设置缺失值per$age1[per$age < 30] = "young" #生成新变量per$age1[per$age >= 30 & per$age<50] <- "middle age" per#第二种方法per <- data.frame(name = c("张三","李四","王五","赵六"), age = c(23,45,34,1000))per <- within(per,{ age1 <- NA age1[age < 30] <- "young" age1[age>=30 & age<50] <- "middle age"})per

2、变量的重命名

变量已经存在,但是如果对变量名称不满意,可以对变量重新命名,这里提供以下几种方法:

手动输入。应用fix()函数调出编辑框,手动输入即可。

使用names()函数。格式为:names(x) <- value。需要指定对第几个变量名进行修改。

使用plyr包中的rename()函数。格式为rename(x, replace, warn_missing = TRUE, warn_duplicated = TRUE),需要指定对哪个变量名进行修改。

per <- data.frame(name = c("张三","李四","王五","赵六"), age = c(23,45,34,1000))per#第一种方法:手动输入fix(per) #调出输入框,手动输入#第二种方法,names()函数per <- data.frame(name = c("张三","李四","王五","赵六"), age = c(23,45,34,1000))names(per)[2] <- "年龄" #指定第个变量重命名per#第三种方法per <- data.frame(name = c("张三","李四","王五","赵六"), age = c(23,45,34,1000))library(plyr)per <- rename(per,c(age="年龄")) #直接对变量名进行修改per

补充:R语言变量的处理(创建新变量 变量重新赋值)

创建新变量:

方法一:

#在mydata数据库中创建新变量sum,sum是mydata数据库中x1和x2之和mydata$sum <- mydata$x1 + mydata$x2#在mydata数据库中创建新变量mean,sum是mydata数据库中x1和x2平均mydata$mean <- (mydata$x1 + mydata$x2)/2

eg:

> newwomen=women> newwomen$bmi=women$weight/women$height^2;> newwomen height weight bmi1 58 115 0.034185492 59 117 0.033611033 60 120 0.033333334 61 123 0.033055635 62 126 0.032778366 63 129 0.032501897 64 132 0.032226568 65 135 0.031952669 66 139 0.0319100110 67 142 0.0316328811 68 146 0.0315743912 69 150 0.0315059913 70 154 0.0314285714 71 159 0.0315413615 72 164 0.03163580>

方法二:

attach(mydata) #附上数据mydatamydata$sum <- x1 + x2 #在mydata数据库中创建新变量summydata$mean <- (x1 + x2)/2 #新变量meandetach(mydata) #每次attach数据之后,应该detach,解除之前的数据库粘附

这个地方我们看见x1和x2变量前面不需要再使用mydata$,那是因为我们之前已经附上mydata数据库(attach),这个时候,R已经知道会利用附上的数据中的x1和x2变量直接计算。但是创建的新变量sum必须使用$在mydata数据库之下,不然R就会计算出名字为sum,但是是个list性质的单独数据库。

方法三:

mydata <- transform( mydata, sum = x1 + x2,mean = (x1 + x2)/2)#通过一行命令创建多个新变量。 newwomen=transform(women,bmi=weight/height^2)> newwomen height weight bmi1 58 115 0.034185492 59 117 0.033611033 60 120 0.033333334 61 123 0.033055635 62 126 0.032778366 63 129 0.032501897 64 132 0.032226568 65 135 0.031952669 66 139 0.0319100110 67 142 0.0316328811 68 146 0.0315743912 69 150 0.0315059913 70 154 0.0314285714 71 159 0.0315413615 72 164 0.03163580

变量重新赋值

方法一:

mydata$agecat <- ifelse(mydata$age > 70,c("older"), c("younger")) # 创建年龄组别(2组)

该命令利用ifelse函数,有点类似于其他语言中的if….else。 该命令左边告诉R我们需要在mydata数据库里面创建新变量agecat(年龄组),该变量当age>70时,年龄组变量赋值为older,其他情况下(age<=70),年龄组变量赋值为younger。关于更多ifelse()信息和案例,可通过help(ifelse)查看。

方法二:

attach(mydata)mydata$agecat[age > 75] <- "Elder"mydata$agecat[age > 45 & age <= 75] <- "Middle Aged"mydata$agecat[age <= 45] <- "Young"detach(mydata)#创建变量agecat,并按照年龄大小直接赋值.

重命名

方法一

fix(mydata) #直接重命名,关闭时保存

方法二

library(reshape)mydata <- rename(mydata, c(oldname="newname"))#利用reshape包里面的rename函数直接重命名。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章