变量级别的数据处理无非是对变量的增删改查。
增
即增加新的变量
R语言中,增加一个新变量形式语句如下:
变量名 <- 表达式
表达式可以包含多种运算符和函数。常见运算符包括:
运算符 | 描述 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
^或** | 求幂 |
x%%y | 求余(x mod y)。5%%2的结果为1。 |
x%/%y | 整数除法。5%/%2的结果为2。 |
示例:
#创建一个数据框
mydata <- data.frame(x1 = c(2,2,6,4),
+ x2 = c(3,4,2,8))
mydata
x1 x2
2 3
2 4
6 2
4 8
#绑定mydata
attach(mydata)
#为mydata数据框增加一个sum变量
mydata$sum <- x1 + x2
#为mydata数据框增加一个mean变量
mydata$mean <- (x1+x2)/2
mydata
x1 x2 sum mean
2 3 5 2.5
2 4 6 3.0
6 2 8 4.0
4 8 12 6.0
#解除绑定
detach(mydata)
#用transform函数可以达到同样效果
mydata <- transform(mydata,sumx = x1+x2,meanx = (x1+x2)/2)
mydata
x1 x2 sum mean sumx meanx
2 3 5 2.5 5 2.5
2 4 6 3.0 6 3.0
6 2 8 4.0 8 4.0
4 8 12 6.0 12 6.0
attach与detach函数用于绑定和解除数据集,以简化数据处理过程。如果不使用二者,生成sum变量,则每个变量名之前需要加上数据集名称+$符号。
使用transform函数,语法格式为transform(数据集名称,变量名=表达式)
随着R语言的发展出现了tidyverse系列包可以进行完整的数据分析流程。本基础教程以传统方法为主,tidyverse系列日后涉及。
删
即删除不需要的变量或选择需要的变量。
#将R语言自带鸢尾花数据集赋值给data
data <- iris
#查看前5行
head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
5.1 3.5 1.4 0.2 setosa
4.9 3.0 1.4 0.2 setosa
4.7 3.2 1.3 0.2 setosa
4.6 3.1 1.5 0.2 setosa
5.0 3.6 1.4 0.2 setosa
5.4 3.9 1.7 0.4 setosa
#选择第3到5的变量,即删除1到2的变量
data <- data[,c(3:5)]
#查看新的数据
head(data)
Petal.Length Petal.Width Species
1.4 0.2 setosa
1.4 0.2 setosa
1.3 0.2 setosa
1.5 0.2 setosa
1.4 0.2 setosa
1.7 0.4 setosa
#生成一个包含变量名字的向量vars
vars <- c('Sepal.Width','Petal.Length')
#将R语言自带鸢尾花数据集赋值给data
data <- iris
#从data数据集选择包含vars内变量的数据
data <- data[vars]
#查看前5行
head(data)
Sepal.Width Petal.Length
3.5 1.4
3.0 1.4
3.2 1.3
3.1 1.5
3.6 1.4
3.9 1.7
#将R语言自带鸢尾花数据集赋值给data
data <- iris
#使用%in%判断data内的变量名是否为Sepal.Length,是返回TRUE,否则返回FALSE。赋值给myvars
myvars <- names(data)%in%c('Sepal.Length')
#!myvars反向选择,生成不包含Sepal.Length变量的数据集newdata
newdata <- data[!myvars]
#查看前5行
head(newdata)
Sepal.Width Petal.Length Petal.Width Species
3.5 1.4 0.2 setosa
3.0 1.4 0.2 setosa
3.2 1.3 0.2 setosa
3.1 1.5 0.2 setosa
3.6 1.4 0.2 setosa
3.9 1.7 0.4 setosa
改
包括对变量的值的修改和对变量的类型的修改。两者有时存在某些共变,如连续变量离散化就是为将连续变量类型转化为分类变量(因子)类型。
变量的值的修改(重编码)包括连续变量离散化、分类变量取值合并。
可以使用R中的一个或多个逻辑运算符重编码数据。逻辑运算符表达式返回TRUE或FALSE。
运算符 | 描述 |
---|---|
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
== | 等于 |
!= | 不等于 |
!x | 非x |
x竖线y | x或y |
x&y | x和y |
isTRUE(x) | 测试x是否为TRUE |
x竖线y为x|y,本文章编码显示问题才用竖线代替|
变量修改的语法为variable[condition]<-expression
其中,variable为变量名,condition为条件,expression为赋值。
在condition的值为TRUE时执行赋值。
示例:
#首先生成一个数据框
age <- c(15,18,59,48,26,58,74,85,99,52)
sex <- c(1,2,1,2,1,1,1,2,2,1)
ship <- data.frame(age,sex)
ship
age sex
15 1
18 2
59 1
48 2
26 1
58 1
74 1
85 2
99 2
52 1
#将年龄取值99视为缺失值NA
ship$age[ship$age==99] <- NA
#将年龄大于75的取值为Elder,赋值给agecat变量。
ship$agecat[ship$age>75] <- 'Elder'
#将年龄介于55-75之间的取值为Middle Aed,赋值给agecat变量。
ship$agecat[ship$age>=55 & ship$age<=75] <- 'Middle Aged'
#将年龄小于55的取值为Young,赋值给agecat变量。
ship$agecat[ship$age<55] <- 'Young'
ship
age sex agecat
15 1 Young
18 2 Young
59 1 Middle Aged
48 2 Young
26 1 Young
58 1 Middle Aged
74 1 Middle Aged
85 2 Elder
NA 2 <NA>
52 1 Young
#合并分类变量取值
#将agecat为Elder的取值为TRUE,赋值给isElder变量
ship$isElder[ship$agecat=='Elder'] <- TRUE
#将agecat不是Elder的取值为FALSE,赋值给isElder变量
ship$isElder[ship$agecat !='Elder'] <- FALSE
ship
age sex agecat isElder
15 1 Young FALSE
18 2 Young FALSE
59 1 Middle Aged FALSE
48 2 Young FALSE
26 1 Young FALSE
58 1 Middle Aged FALSE
74 1 Middle Aged FALSE
85 2 Elder TRUE
NA 2 <NA> NA
52 1 Young FALSE
判断 | 转换 |
---|---|
is.numeric() | as.numeric() |
is.character() | as.character() |
is.factor() | as.factor() |
某些R函数需要指定数据集类型,as.datatype()函数可以使数据转换为所要求的的格式。
查
查看变量类型,使用上述表格中判断函数或str()函数。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。如有错误或未考虑完全的地方,望不吝赐教。