R语言与统计分析数据科学与R语言

二维数据集取子集的3种办法

2020-12-18  本文已影响0人  灵活胖子的进步之路

矩阵及数据框是平常我们处理数据时候常用到的原始数据,特别是数据框data.frame,其不要求每列向量的类型一致,最为常用。在处理数据时,我们经常需要对data.frame取子集,并赋值给新的data.frame,这样可以在不更改原始数据的前提下进行下一步处理,以下以data.frame为例介绍3中常用的二维数据集取子集,矩阵的办法是完全相同的

rm(list = ls())#清空环境变量
options(stringsAsFactors = F)#默认不把字符型变量当做因子

library(stringr)#处理字符串的超好用R包
data(mtcars)#加载数据集
df <- mtcars#定义数据集名称
attach(df)#加载数据集入当前环境
class(df)#查看数据集类型
str(df)
数据集结构

1.取子集的第一种办法为规定行数及列数

df[1:4,1:5]#表示取df数据集前4行及前5列,1:4#表示数字1到4
前4行前5列内容展示
df[1,]#表示取第1行所有内容(第一行所有列)
取第1行所有内容
colnames(df)#表示取列名,可以看出与df[1,]的区别
取列名,注意与df[df,1]的区别
df[,1]#表示取第1列所有内容(第一列所有行)
取第1列所有内容
row.names(df)#表示取行名
取行名

2.取子集的第二种办法为指定行名及列名

我们需要取cyl和wt这两列前4行的内容可以用以下方法

df[1:4,c("cyl","wt")]
cyl和wt这两列前4行的内容

这里说下有的同学可能会写成df[1:4,"cyl","wt"]或[1:4,("cyl","wt")],这里说下中间那个逗号代表维度的意思,逗号前为行,逗号后为列,如果有三个逗号就说明df有三个维度,但实际df为数据框仅有两个维度。后面那种情况虽然注意到了这个问题,但是取子集的时候应该用向量来取,字符串组成向量的时候必须加上C了。

df["Mazda RX4",2:6]#取马自达RX4行2到6列的数据
一个字符串可以不加c()哈

3.第三种办法是用逻辑值取子集,取子集的行或者列的向量为一个逻辑值向量,其取值与行数或者列数相同

#取行名包含Merc行,1:4列的内容
df[str_detect(row.names(df),"Merc"),1:4]
取行名包含Merc行,1:4列的内容

以下分步骤说下

str_detect为stringr包的函数,其作用是在给定的字符串向量中寻找目标向量,简单理解为搜索就好
str_detect(row.names(df),"Merc")的意思是在row.names(df)的字符型向量中寻找"Merc"这一内容,返回为逻辑值,如下图


返回的逻辑值

然后把此逻辑值带入取子集的中括号内就可以了
后续可以把这个子集赋值给一个新名字就可以啦

df_new <- df[str_detect(row.names(df),"Merc"),1:4]
df_new
赋值新子集
上一篇 下一篇

猜你喜欢

热点阅读