数据、字符R处理

R中5种取子集的方法,你zao吗?

2020-03-29  本文已影响0人  Dayueban

编译:Dayueban
责编:王采荷

写在前面

当我们需要对一个表格进行有目的性的索取的时候,比如我想抽取出我想要的行或者是列,那么这个时候你会采用哪些方法呢?个人认为,以下几种都是可以的。

第一种: example[x,y]

这一种也是我们平时,或者对于我们初学者来说用的最多的一种方法了。

### import education expenditure data set and assign column names
education <-read.csv("https://vincentarelbundock.github.io/Rdatasets/csv/robustbase/education.csv)", stringsAsFactors =FALSE)
colnames(education) <- c("X","State","Region","Urban.Population","Per.Capita.Income","Minor.Population","Education.Expenditures")
View(education)
图一 数据集概览
dim(education)
# [1] 50  7
# 可以看到数据集有50行,7列

数据集不算大,所以我们可以采用中括号的方式,直接选择你想要保留的行和列,比如我想保留region=2的行,然后与其对应的Minor.PopulationEducation.Expenditures,那我我就可以这样:

# 为我们所取子集取个名称:ed_exp1
ed_exp1 <- education[c(10:21),c(2,6:7)]
View(ed_exp1)

第二种:example[-x,-y]

除了直接选择我们所需要的列和行,那么反过来,我们把不需要保留的行和列减去就可以了,这里用到一个负号“-”

ed_exp2 <- education[-c(1:9,22:50),-c(1,3:5)]
图二 所构建的ed_exp1和ed_exp2数据子集

!!!敲黑板
需要注意的是,如果数据集比较小,采用上述两种方法还可以,但是如果是长百上千行和列,如果用这样的方法去取子集的话则会事倍功半,那么接下来我们可能需要更加便捷和高效的方法:

第三种:还是用中括号,但是我们加入了一些函数

ed_exp3 <- education[which(education$Region == 2),names(education) %in% c("State","Minor.Population","Education.Expenditures")]

第四种:采用subset函数

ed_exp4 <- subset(education, Region == 2, select = c("State","Minor.Population","Education.Expenditures"))

当然,有些人肯定会觉得第三种方法写的代码也太长了,要那么多字,未免复杂了写。

那么这里的subset函数是什么意思呢,首先subset函数包括三个选项:subset(x, subset, select, ...),其中x表示原始数据集,第二个参数表示截取满足你要求的行,第三个参数表示你要保留的列,怎么样,是不是更简单一些,操作性更强呢?

图三 子集ed_exp3和ed_exp4

第五种:dplyr包

前面四种都是基于基础R语言环境就可以执行的,这里介绍的第五种方法涉及R语言包dplyr,需要安装该包之后才能运行相关的函数

# 安装dplyr包
install.packages("dplyr")
library(dplyr)
ed_exp5 <- select(filter(education, Region == 2),c(State,Minor.Population:Education.Expenditures))

小结

总的来说,物种方法各有特点,无论哪种,有助于你的数据取子集和快速的数据分析即可。

参考:

https://www.r-bloggers.com/5-ways-to-subset-a-data-frame-in-r/

上一篇 下一篇

猜你喜欢

热点阅读