楼主: WHAND
734 1

[学习分享] R语言 | 数据索引 [推广有奖]

  • 0关注
  • 5粉丝

硕士生

98%

还不是VIP/贵宾

-

威望
0
论坛币
3570 个
通用积分
56.4010
学术水平
5 点
热心指数
5 点
信用等级
5 点
经验
2596 点
帖子
54
精华
0
在线时间
328 小时
注册时间
2017-9-13
最后登录
2024-4-11

楼主
WHAND 学生认证  发表于 2020-1-28 19:50:36 |只看作者 |坛友微信交流群|倒序 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

索引即提取/查询数据集中想要的数据,与Python类似,R语言提供位置索引与名称索引两种索引体系。由于数据索引是基于数据容器,因此建议先阅读R语言数据类型与数据容器,再阅读本篇。
本人的知乎|简书|CSDN|微信公众号PurePlay 会同步更新量化金融与R干货。

目录

1. 位置索引
  1.1 正整数
  1.2 负整数
  1.3 零
  1.4 空格
  1.5 逻辑值
2. 名称索引

1. 位置索引

R语言的索引方式类似于线性代数中的i,ji, j记号,df[i, j]会返回df数据框中的第ii行第jj列元素。除了在括号中传入正整数之外,R语言还可以传入负整数、零、空格和逻辑值来进行索引。

1.1 正整数

首先创建一个简单的数据框:

df <- data.fr ame(price = c(89.2, 23.2, 21.2),
                symbol = c('MOT','AAPL','IBM'),
                action = c('Buy','Sell','Buy'),
                stringsAsFactors = FALSE)
df
##   price symbol action
## 1  89.2    MOT    Buy
## 2  23.2   AAPL   Sell
## 3  21.2    IBM    Buy

提取df数据框第2行第3列的元素:

df[2,3]
## [1] "Sell"

注意到在Python等编程语言中,索引是从0开始的,这意味着索引值0会返回第一个元素,而1会返回第二个元素,以此类推。而在R作为一门为数据科学、统计学者服务的语言,则与线性代数保持一致,索引值1返回第一个元素。

提取df数据框第2行的第2列与第3列两个元素:

df[2,c(2,3)]
##   symbol action
## 2   AAPL   Sell

如果在索引中重复某个数值,R就会在相应的索引位置重复提取相应的数据。

df[c(2,2),c(2,3)]
##     symbol action
## 2     AAPL   Sell
## 2.1   AAPL   Sell

其他数据容器的位置索引方式与之类似,只要在中括号中传入对应维度的数值即可。

如果提取两列及以上的数据,返回值的格式为data.fr ame

class(df[2, 2:3])
## [1] "data.fr ame"

如果只提取一列数据,R则会返回一个原子型向量;如果仍想返回一个数据框,可以在括号内添加drop = FALSE参数。

class(df[2:3, 2])
## [1] "character"
class(df[2:3, 2, drop = FALSE])
## [1] "data.fr ame"

1.2 负整数

与正整数相反,负整数索引把负整数绝对值(正整数)对应的元素排除在外,返回剩下的所有元素。如果需要选取数据集中的大部分行或列,使用负整数索引会更加高效。

返回除了第一行之外的所有元素:

df[-1, 1:3]
##   price symbol action
## 2  23.2   AAPL   Sell
## 3  21.2    IBM    Buy

仅返回第一行的元素;

df[-(2:3), 1:3]
##   price symbol action
## 1  89.2    MOT    Buy

如果在一个相同的索引位置同时使用正整数和负整数,R便会报错。

df[c(-1,1), 1:3]
## Error in xj[i] : only 0's may be mixed with negative subsc ripts

1.3 零

零索引将不会提取任何信息,实际操作中用处不大。

df[0,0]
## data fr ame with 0 columns and 0 rows
df[0,1]
## numeric(0)

1.4 空格

空格表示提取该索引位置所代表维度的所有元素。例如,提取第一行的所有元素:

df[1, ]
##   price symbol action
## 1  89.2    MOT    Buy

1.5 逻辑值

在逻辑值索引时,R会匹配索引值为TRUE的行或列的位置并提取相应的元素。例如,提取第1行的第二、三个元素:

df[1,c(FALSE, TRUE, TRUE)]
##   symbol action
## 1    MOT    Buy

另外,在列表的索引中,如果采用单中括号的常规方式会返回一个新的列表对象(即使你只需要一个元素)。

ls <- list(numbers = c(1,2), 
           logical = TRUE, 
           string = c("a", "b", "c"))
ls[1]
## $numbers
## [1] 1 2
class(ls[1])
## [1] "list"

为了直接提取出该元素,需要使用双中括号。

ls[[1]]
## [1] 1 2

2. 名称索引

如果被索引的对象有名称属性,就可以采用待提取元素的名称作为索引值。例如,提取整个price列:

df[ ,"price"]
## [1] 89.2 23.2 21.2

使用$使名称索引更加简便:

df$price
## [1] 89.2 23.2 21.2

且在列表当中使用$可以直接返回对应的元素,而不是列表对象:

ls$numbers
## [1] 1 2

以上是本篇的全部内容,欢迎关注我的知乎|简书|CSDN|微信公众号PurePlay , 会不定期分享量化金融与R干货。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


早起学习强国
沙发
tianwk 发表于 2020-1-31 15:06:22 |只看作者 |坛友微信交流群
thanks for sharing

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-26 22:29