科研星球

R语言统计与绘图:编程基础-运算、数据类型和向量等基本介绍

640.png


1. 基本算术运算

基本的算术运算符是:

+(加法)

-(减法)

*(相乘)

/(除以)

^(取幂)


好啦,接下来让我们实践一下吧!打开你的RStudio,在控制台中直接键入以下命令:


4 + 7

[1] 11


7 - 4

[1] 3


4 * 7

[1] 28


7/4

[1] 1.75


2^4

[1] 16


以上就是最基本的算术运算,大家可以操作一下,接下来我们要开始稍微难一点点的运算喽。

Tips



在R中,“#”用于添加注释以解释R代码的含义。


1.1 基本算术功能

常用的有


log2(x) # x的对数以2为底
log10(x) # x的对数以10为底
exp(x) # x的指数
abs(x) # x的绝对值
sqrt(x) # x的平方根

和计算器一样,R语言也可以很方便地计算对数、指数、绝对值、平方根等,直接输入以上算术公式,按回车就可以啦,大家学会了吗?

接下来,我们要引入一个很重要的概念:变量。

简单来说,变量就是一个名称,就像你叫张三、李四一样。一个人有了名字就更方便交流了,变量也一样。通过设置变量,我们可以进行很多进阶的操作哦!

1.2 给变量赋值

例如,下面的R代码会将病人的年龄存储在一个变量中,例如"patient_age":

patient_age <- 2

Tips


请注意,可以将<-=用于变量分配。


Tips


请注意,R区分大小写。这意味着patient_age与Patient_Age不同。


要打印创建的对象的值,只需键入其名称:

patient_age

[1] 2

或使用函数 print():

print(patient_age)

[1] 2

Tips



R将对象patient_age(也称为变量)保存在内存中,可以进行一些操作。


#5个病人的年龄
5 * patient_age

[1] 10

你可以更改对象的值:

patient_age <- 5
patient_age

[1] 5

函数ls()可用于查看我们创建的对象列表:

ls()

[1] "patient_age"

要删除变量,请使用函数rm():


2. 基本数据类型

基本数据类型为数字,字符和逻辑。

my_age <- 28
my_name <- "Lily"
#逻辑词
#(yes/no) <=> (TRUE/FALSE)
is_female <- TRUE

可以使用函数()来查看变量的类型:

class(my_age)

[1] "numeric"

class(my_name)

[1] "character"

你还可以使用函数is.numeric(),is.character(),is.logical()来检查变量分别是数字,字符还是逻辑。例如:

is.numeric(my_age)

[1] TRUE

is.numeric(my_name)

[1] FALSE

如果要将变量的类型更改为另一类型,请使用as。*函数,包括:as.numeric(),as.character(),as.logical()等。

my_age

[1] 28


#Convert my_age to a character variable
as.character(my_age)

[1] "28"


Tips


请注意,将字符转换为数字将输出NA(不可用)。R无法将数字变量转换为字符变量。



3. 向量

向量是同一对象中多个值(数字,字符或逻辑)的组合。

在这种情况下,你可以具有数字向量,字符向量或逻辑向量。

3.1 创建一个向量

使用函数c()创建矢量,如下所示:

#储存病人的数据到一个数值向量
patient_ages <- c(27, 25, 29, 26)
patient_ages

[1] 27 25 29 26




#保存病人的名字到一个字符向量
my_patients <- c("Zheng", "Wang", "Liu", "Li")
my_patients

[1] "Zheng" "Wang" "Liu" "Li"

# 将病人的婚姻状况存储在逻辑向量中
# (yes/no <=> TRUE/FALSE)
are_married <- c(TRUE, FALSE, TRUE, TRUE)
are_married

[1]  TRUE FALSE  TRUE  TRUE

Tips


使用函数names()可以给向量的元素命名


#具有元素名称的向量
names(patient_ages) <- c("Zheng", "Wang", "Liu", "Li")
patient_ages

Zheng Wang Liu Li

27      25      29      26

#你还可以创建一个命名向量,如下所示
patient_ages <- c(Zheng = 27, Wang = 25, Liu = 29, Li = 26)
patient_ages

Zheng Wang Liu Li

27      25      29      26

Tips


请注意,向量只能容纳相同类型的元素。例如,你不能有一个既包含字符又包含数字值的向量。



  • 查找向量的长度(即向量中元素的数量)



#病人数量
length(my_patients)

[1] 4

3.2 缺失值的情况

我知道我的一些病人有两个孩子。但是对于其余的病人,此信息缺失(NA)。

在R中,缺失值(或缺失信息)用NA表示:

have_child <- c(Zheng = "yes", Wang = "yes", Liu = NA, Li = NA)
have_child

Zheng Wang Liu  Li

"yes"   "yes"      NA      NA

可以使用函数is.na()来检查数据是否包含缺失值。函数is.na()的结果是一个逻辑向量,其中值TRUE指定x中的对应元素为NA。

#检查have_child是否包含缺失值
is.na(have_child)

Zheng Wang Liu  Li

FALSE   FALSE    TRUE    TRUE

Tips


请注意,还有第二种缺失值,称为NaN(“非数字”)。这是在数学函数无法正常运行的情况下产生的,例如0/0 = NaN。


Tips


还要注意,对于NA和NaN值,函数is.na()均为TRUE。为了区分这些,函数is.nan()仅对NaN是TRUE。


3.3 获取向量的子集

  • 通过正索引选择:通过向量在方括号中的位置(索引)选择元素

#选取第二个病人名字
my_patients[2]

[1] "Wang"

#选取第二和第四个病人名字
my_patients[c(2, 4)]

[1] "Wang" "Li"

#选取第一到三个病人名字
my_patients[1:3]

[1] "Zheng" "Wang" "Liu"

Tips


请注意,R从1开始索引而不是0。因此,你的第一列位于[1]而非[0]。


如果你有命名向量,也可以使用名称来选择元素:

patient_ages["Liu"]
Liu

28

  • 通过负索引进行选择:排除元素

#去除第二个病人
my_patients[-2]

[1] "Zheng" "Liu" "Li"

#去除第二和第四个病人
my_patients[-c(2, 4)]

[1] "Zheng" "Liu"

#去除第一到三个病人
my_patients[-(1:3)]

[1] "Li"

  • 如果要删除丢失的数据,请使用以下方法:


have_child

Zheng Wang Liu  Li

"yes"   "yes"      NA      NA

#只保留无缺失的数据
have_child[!is.na(have_child)]

Zheng Wang

"yes"   "yes"

#将缺失值转成
NOhave_child[is.na(have_child)] <- "NO"
have_child

Zheng Wang Liu  Li

"yes"    "yes"      "NO"    "NO"

请注意,

R中可用的“逻辑”比较运算符为:

<:少于

>:大于

<=:小于或等于

> =:大于或等于

==:相等

!=:不相等

3.4 向量计算

如果对向量执行操作,则该操作将应用于向量的每个元素。下面提供了一个示例:

#病人的每周住院费用
payment <- c(2000, 1800, 2500, 3000)
names(payment) <- c("Zheng", "Wang", "Liu", "Li")
payment

Zheng Wang Liu  Li

2000    1800    2500    3000

#费用的两倍
payment * 2

Zheng Wang Liu  Li

4000    3600    5000    6000

如你所见,R将费用向量中的每个元素乘以2。

假如你需要将费用乘以不同的系数。可以使用以下R代码:

#创建与付款相同长度的coefs向量
coefs <- c(2, 1.5, 1, 3)
#乘以coefspayment 
* coefs

Zheng Wang Liu  Li

4000    2700    2500    9000

Tips



请注意,计算是逐元素进行的。工资向量的第一个元素乘以coefs向量的第一个元素,依此类推。

计算数值向量的平方根:

my_vector <- c(4, 16, 9)
sqrt(my_vector)

[1] 2 4 3

其他一些常用的功能,小编在这里列出,欢迎尝试:

max(x)
min(x)
range(x)
length(x)
sum(x)
mean(x)
sd(x)
var(x)
sort(x)


4. 因素

因子变量表示数据中的类别或组。函数factor()可用于创建因子变量。

创建一个因素

patient_groups <- factor(c(1, 2, 1, 2))
patient_groups

[1] 1 2 1 2

Levels: 1 2

Tips



变量patient_groups包含两类病人:1和2。在R术语中,类别称为因素水平(factor level)

可以使用level()函数访问因素水平:



#查看因素水平
levels(patient_groups)

[1] "1" "2"

#更改因素水平1、2为具体内容
levels(patient_groups) <- c("recovered_patient", "not_recovered_patient")
patient_groups

[1] recovered_patient     not_recovered_patient recovered_patient     not_recovered_patient

Levels: recovered_patient   not_recovered_patient

好了,本期讲解就先到这里。



没有账号?