抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

R 对象中的元素在部分应用场景中是不需要更改的,但在某些应用场景中,需要(甚至经常需要)修改元素中的值。

原始数据改值

可以使用索引方式对对象的原始数据进行更改,方法包括但不限于:赋值、运算、扩充等。扩充,即使用原对象中不包含的索引值进行创建,R 会自动将对象的长度扩充以包含新值:

1
2
3
4
5
6
> x <- 1:5
> x
[1] 1 2 3 4 5
> x[10] <- 10
> x
[1] 1 2 3 4 5 NA NA NA NA 10

扩充机制只能用于已存在维度上,尝试给向量和列表在第二维上的自动扩充会导致错误

可以使用 $ 向对象中添加新项:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
> df <- data.frame(a=c(1,2,3),b=c("a","b","c"),c=c(TRUE,FALSE,TRUE))
> df
a b c
1 1 a TRUE
2 2 b FALSE
3 3 c TRUE
> df$d <- c("Hello", "World", "R")
> df
a b c d
1 1 a TRUE Hello
2 2 b FALSE World
3 3 c TRUE R
> df$d <- NULL
> df
a b c
1 1 a TRUE
2 2 b FALSE
3 3 c TRUE

值筛选

虽然数值索引能够提取到确定位置的数据,但不方便查找具有某些特性的数据,因此逻辑索引的优势便体现出来。

关系运算

R 中有以下七种用于判断对象间关系的关系运算符:

运算符语法说明
>a > b判断 a 是否大于 b
<a < b判断 a 是否小于 b
>=a >= b判断 a 是否大于或等于 b
<=a <= b判断 a 是否小于或等于 b
==a == b判断 a 是否等于 b
!=a != b判断 a 是否不等于 b
%in%a %in% b判断 a 是否被包含于 b

判断结果为真时运算返回 TRUE ,判断结果为假时运算返回 FALSE 。

%in% 运算的结果类型与 a 一致,并且 b 并不一定是多元素对象

关系运算也可以用于非数值对象,甚至可以用于不同类型的对象,但对于不同类型的对象的关系运算,R 会尝试进行强制转换将它们变为同一类型

逻辑运算

R 中有以下六种用于判断对象间关系的逻辑(布尔)运算符:

运算符语法说明
&a & b判断 a 和 b 是否同时为真
|a | b判断 a 和 b 是否至少有一个为真
xorxor(a, b)判断 a 和 b 是否只有一个为真
!!a判断 a 是否为假
anyany(a, b, c, …)判断 a 、b 、c 等是否至少有一个为真
allall(a, b, c, …)判断 a 、b 、c 等是否全部为真

判断结果为真时运算返回 TRUE ,判断结果为假时运算返回 FALSE 。

缺失信息

在前面的向量长度扩充中出现了 NA 这个值,说明对象在该处的值不可用。大多数对 NA 的赋值、数值运算、关系运算、逻辑运算均为 NA 。

NA 排除

由于大多数对 NA 的运算都会导致 NA 的结果,因此可能需要在大量数据中去除掉含有的 NA 值以进行运算。可以使用 na.rm == TRUE 来达成此效果,大多数 R 函数均含有此可选参数。

NA 定位

大多数运算(包括函数)均会对 NA 相关的操作返回 NA,而 is.na 函数可以用来判断元素的值是否为 NA 。

评论



This is a picture without description

This is a picture without description This is a picture without description This is a picture without description