r 行名相同的放在一行_R语言系列 数据处理

【免责声明:本文用于教学】

05. 数据处理

6cbb9e1e964774f8eafa03055108cf6f.png

f3b98504c740486028bf045455abe1ab.png

一、数据框创建新变量

假设有MyData数据框,其中变量为x1,x2. 现创建名为sumx和meanx的新变量,分别存储变量x1与x2的加和与均值。

MyData<-data.frame(x1 = c(2, 2, 6, 4), x2 = c(3, 4, 2, 8))

#方法1

MyData$sumx <- MyData$x1 + MyData$x2

MyData$meanx <- (MyData$x1 + MyData$x2)/2

#方法2

attach(MyData)

MyData$sumx <- x1+x2

MyData$meanx <- (x1+x2)/2

detach(MyData)

#方法3

MyData <- transform(MyData,

sumx = x1 + x2,

meanx = (x1+x2)/2)

二、变量的重命名

在处理数据和数据分析过程中,我们可能需要修改变量名。例如,由于R处理变量标签的能力有限,一种常见的解决方法是将变量标签作为变量名,然后通过位置下标来访问这个变量。修改变量名有以下几种常见方式。

1. 用交互式编辑器

若修改数据集x的变量名,键入函数fix(x),即可打开交互式编辑器界面。

> score<-data.frame(student=c("A","B","C","D"),gender=c("M","M","F","F"),math=c(90,70,80,60),Eng=c(88,78,69,98),pl=c(66,59,NA,88))

> fix(score)

> score.list<-as.list(score) #将score转化为列表

> fix(score.list)

(1)若数据集为矩阵或数据框

将打开“数据编辑器”,单击要修改的变量名,在弹出的“变量编辑器”修改即可:

31b729ac9eee2c4a938193cd105ff92d.png

(2)若数据集为列表

将交互式编辑器为一个记事本,只需修改“.Names”之后对应的变量名即可:

b39be3a74f82621420ac85e6709cd2f9.png

2. 用函数rename()

reshape包中的函数rename(),用来修改数据库和列表的变量名,但不能修改矩阵的变量名,基本格式为:

rename(x, c(oldname="newname",...))

其中,oldname为原变量名,newname为新变量名。

library(reshape)

> rename(score,c(pl="chinese"))

student gender math Eng chinese

1 A M 90 88 66

2 B M 70 78 59

3 C F 80 69 NA

4 D F 60 98 88

> rename(score.list,c(pl="chinese"))

$student

[1] A B C D

Levels: A B C D

$gender

[1] M M F F

Levels: F M

$math

[1] 90 70 80 60

$Eng

[1] 88 78 69 98

$chinese

[1] 66 59 NA 88

注意:原数据集中的变量名并未被修改。

3. 用函数names()

和rename()一样可用来修改数据框和列表的变量名,不能修改矩阵的变量名;区别在于:names()会在原数据集中修改变量名。

其基本格式为:

names(x)[i]<- "newname"

> names(score)[5]="chinese"

> score

student gender math Eng chinese

1 A M 90 88 66

2 B M 70 78 59

3 C F 80 69 NA

4 D F 60 98 88

4. 用函数colnames()和rownames()

用来修改矩阵的变量名(行名和列名),也能修改数据框的行名和列名。基本格式为:

rownames(x)[i]<- "newname"

> colnames(score)[5]="Chinese"

> score

student gender math Eng Chinese

1 A M 90 88 66

2 B M 70 78 59

3 C F 80 69 NA

4 D F 60 98 88

> rownames(score)=letters[1:4]

> score

student gender math Eng Chinese

a A M 90 88 66

b B M 70 78 59

c C F 80 69 NA

d D F 60 98 88

三、变量的重新编码

例如,数据集Leader中连续型变量age重新编码为分类型变量rankAge (Young、Middle Aged、Elder)。【数据集缺失】

首先,必须把99岁的年龄值重新编码为缺失值:

Leader$age[Leader$age == 99] <-NA

然后创建rankAge变量:

Leader$rankAge[Leader$age>75] <- "Elder"

Leader$rankAge[Leader$age>=50 & Leader$age <=75] <- "Middle Aged"

Leader$rankAge[Leader$age<50] <- "Young"

或者

Leader<-within(Leader, {

rankAge<-NA

rankAge[age>75] <- "Elder"

rankAge[age>=50 & age<=75]<-"Middle Aged"

rankAge[age<50] <- "Young"})

四、数据排序

1.函数sort(),基本

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值