R语言学习系列17数据整合Ⅰ基本操作汇总Word文件下载.docx
- 文档编号:20530531
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:15
- 大小:90.41KB
R语言学习系列17数据整合Ⅰ基本操作汇总Word文件下载.docx
《R语言学习系列17数据整合Ⅰ基本操作汇总Word文件下载.docx》由会员分享,可在线阅读,更多相关《R语言学习系列17数据整合Ⅰ基本操作汇总Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
将打开“数据编辑器”,单击要修改的变量名,在弹出的“变量编辑器”修改即可:
(2)若数据集为列表
将交互式编辑器为一个记事本,只需修改“.Names”之后对应的变量名即可:
2.用函数rename()
reshape包中的函数rename(),用来修改数据库和列表的变量名,但不能修改矩阵的变量名,基本格式为:
rename(x,c(oldname="
newname"
...))
其中,oldname为原变量名,newname为新变量名。
library(reshape)
rename(score,c(pl="
chinese"
))
studentgendermathEngchinese
1AM908866
2BM707859
3CF8069NA
4DF609888
rename(score.list,c(pl="
$student
[1]ABCD
Levels:
ABCD
$gender
[1]MMFF
FM
$math
[1]90708060
$Eng
[1]88786998
$chinese
[1]6659NA88
注意:
原数据集中的变量名并未被修改。
3.用函数names()
和rename()一样可用来修改数据框和列表的变量名,不能修改矩阵的变量名;
区别在于:
names()会在原数据集中修改变量名。
其基本格式为:
names(x)[i]<
-"
names(score)[5]="
score
4.用函数colnames()和rownames()
用来修改矩阵的变量名(行名和列名),也能修改数据框的行名和列名。
基本格式为:
rownames(x)[i]<
colnames(score)[5]="
Chinese"
studentgendermathEngChinese
rownames(score)=letters[1:
4]
aAM908866
bBM707859
cCF8069NA
dDF609888
三、变量的重新编码
例如,数据集Leader中连续型变量age重新编码为分类型变量rankAge(Young、MiddleAged、Elder)。
首先,必须把99岁的年龄值重新编码为缺失值:
Leader$age[Leader$age==99]<
-NA
然后创建rankAge变量:
Leader$rankAge[Leader$age>
75]<
Elder"
=50&
Leader$age<
=75]<
MiddleAged"
Leader$rankAge[Leader$age<
50]<
Young"
或者
Leader<
-within(Leader,{
rankAge<
rankAge[age>
age<
=75]<
-"
rankAge[age<
})
四、数据排序
1.函数sort(),基本格式:
sort(x,decreasing=FALSE,na.last=FALSE,...)
其中,
x为排序对象(数值型或字符型);
decreasing默认为FALSE即升序,TURE为降序;
na.last默认为FALSE(NA值将被删除),若为TRUE,则将向量中的NA值放到序列末尾。
sort(score$math)
[1]60708090
sort(score$math,decreasing=TRUE)
[1]90807060
sort(score$Chinese,na.last=TRUE)
[1]596688NA
2.函数rank()
返回值是该向量中对应元素的秩(排名),基本格式为:
rank(x,na.last=FALSE,ties.method=...)
其中,ties.method指定对数据集中的重复数据的秩的处理方式:
“average”——取平均值秩(默认)
“first”——位于前面的数据的秩取小,依次递增
“random”——随机定义重复秩
“max”——取最大重复秩
“min”——取最小重复秩
x<
-c(3,4,2,5,5,3,8,9)
rank(x)
[1]2.54.01.05.55.52.57.08.0
rank(x,ties.method="
first"
)
[1]24156378
random"
[1]34165278
max"
[1]34166378
3.函数order()
对数据进行排序,返回值是对应“排名”的元素所在向量中的位置,即最小值、次小值、...、最大值所在的位置。
order(x,decreasing=FALSE,na.last=FALSE,...)
不同于前两个函数,order()还可以对数据框进行排序:
data_frame[order(data_frame$v1,data_frame$v2,…),]
若v1值相同,则按v2升序排序;
要将升序改为降序,在变量前添加负号,或用decreasing=TRUE即可。
order(score$math)
[1]4231
score[order(score$math),]
score[order(-score$math),]
4.函数rev()
求逆序,将序列进行反转,即1,2,3变成3,2,1
注:
数据框转置(行列交换),使用t(data)即可。
五、数据合并
1.使用函数
rbind(),增加行(样本数据),要求宽度(列数)相同;
cbind(),增加列(属性变量),要求高度(行数)相同
(见第04篇)
2.使用函数merge()
用来合并两个数据框,按行名或变量名匹配。
merge(x,y,by=…,by.x=…,by.y=…,all=…,
all.x=…,all.y=…,...)
x,y为要合并的数据集;
by指定合并的依据(相同的行或列),默认按相同的列连接;
by.x,by.y分别为第一、二个数据框指定连接的列;
all,all.x,all.y默认为FALSE,仅输出x和y中都包含的行(内连接);
all.x为TURE,则为左外连接;
all.y为TURE,则为右外连接;
all=TRUE,则为全连接
仅返回两个表匹配的数据
左外连接:
返回左表的数据,以及匹配的数据
右外连接:
返回右表的数据,以及匹配的数据
全连接:
返回左右表的数据,以及匹配的数据
例1
setwd("
E:
/办公资料/R语言/R语言学习系列/codes"
load("
salary.Rdata"
index<
-list("
City"
=data$City,"
Index"
=1:
15)
data1<
-merge(data,index,by="
head(data1)
CityWorkPriceSalaryIndex
1Amsterdam171465.649.01
2Bombay205230.35.32
3Chicago192473.961.93
4Dublin175976.041.44
5Frankfurt165074.560.45
6London173784.246.26
例2
authors<
-data.frame(
surname=I(c("
Tukey"
"
Venables"
Tierney"
Ripley"
McNeil"
)),
nationality=c("
US"
Australia"
UK"
),
deceased=c("
yes"
rep("
no"
4)))
authors
surnamenationalitydeceased
1TukeyUSyes
2VenablesAustraliano
3TierneyUSno
4RipleyUKno
5McNeilAustraliano
books<
name=I(c("
"
RCore"
title=c("
ExploratoryDataAnalysis"
ModernAppliedStatistics..."
LISP-STAT"
SpatialStatistics"
StochasticSimulation"
"
InteractiveDataAnalysis"
AnIntroductiontoR"
other.author=c(NA,"
NA,NA,NA,NA,
Venables&
Smith"
books
nametitleother.author
1TukeyExploratoryDataAnalysis<
NA>
2VenablesModernAppliedStatistics...Ripley
3TierneyLISP-STAT<
4RipleySpatialStatistics<
5RipleyStochasticSimulation<
6McNeilInteractiveDataAnalysis<
7RCoreAnIntroductiontoRVenables&
Smith
m1<
-merge(authors,books,by.x="
surname"
by.y="
name"
)#内连接
m1
surnamenationalitydeceasedtitleother.author
1McNeilAustralianoInteractiveDataAnalysis<
2RipleyUKnoSpatialStatistics<
3RipleyUKnoStochasticSimulation<
4TierneyUSnoLISP-STAT<
5TukeyUSyesExploratoryDataAnalysis<
6VenablesAustralianoModernAppliedStatistics...Ripley
m2<
all.x=TRUE)#左外连接
m2
surnamenationalitydeceasedtitleother.author
1McNeilAustralianoInteractiveDataAnalysis<
2RipleyUKnoSpatialStatistics<
4TierneyUSnoLISP-STAT<
m3<
all.y=TRUE)#右外连接
m3
surnamenationalitydeceasedtitleother.author
2RCore<
<
AnIntroductiontoRVenables&
3RipleyUKnoSpatialStatistics<
4RipleyUKnoStochasticSimulation<
5TierneyUSnoLISP-STAT<
6TukeyUSyesExploratoryDataAnalysis<
7VenablesAustralianoModernAppliedStatistics...Ripley
m4<
all=TRUE)#全连接
m4
surnamenationalitydeceasedtitleother.author
<
AnIntroductiontoRVenables&
3RipleyUKnoSpatialStatistics<
4RipleyUKnoStochasticSimulation<
5TierneyUSnoLISP-STAT<
6TukeyUSyesExploratoryDataAnalysis<
x<
-data.frame(k1=c(NA,NA,3,4,5),k2=c(1,NA,NA,4,5),data=1:
5)
y<
-data.frame(k1=c(NA,2,NA,4,5),k2=c(NA,NA,3,4,5),data=1:
x
k1k2data
1NA11
2NANA2
33NA3
4444
5555
y
1NANA1
22NA2
3NA33
merge(x,y,by=c("
k1"
k2"
))#多变量匹配的内连接
k1k2data.xdata.y
14444
25555
3NANA21
六、选取数据的子集
有时数据需要拆分,尤其是数据量较大时,可能需要提出其中一部分做分析,这就需要对变量(列)和观测(行)进行选入和排除。
1.通过行标、列标或索引
参考第3,4篇。
另外,行列标中可以直接使用表达式或which语句,例如
Newdata<
-data[data$Salary>
6500,]
newdata<
-data[which(data$Salary>
6500&
age>
30),]
排除用“-”号。
从数据框中选择变量,例如
-data["
x1"
x2"
x3"
]
剔除变量:
vars<
-names(data)%in%c("
-data[!
vars]
2.函数subset()——选取子集
subset(x,subset,select,...)
x为数据对象;
subset为逻辑表达式,用来指定选取满足某条件的样本;
select指定选取的变量(列)
例如,
-subset(data,age>
=35|age<
24,
select=c(q1,q2,q3))
3.使用SQL语句操作数据框
使用sqldf包中的函数sqldf()
library(sqldf)
#从mtcars选择所有变量,只选使用化油器carb的车型(行),按mpg升序排序
newdf<
-sqldf("
select*frommtcarswherecarb=1orderbympg"
row.names=TRUE)
newdf
mpgcyldisphpdratwtqsecvsamgearcarb
Valiant18.16225.01052.763.46020.221031
Hornet4Drive21.46258.01103.083.21519.441031
ToyotaCorona21.54120.1973.702.46520.011031
Datsun71022.84108.0933.852.32018.611141
FiatX1-927.3479.0664.081.93518.901141
Fiat12832.4478.7664.082.20019.471141
ToyotaCorolla33.9471.1654.221.83519.901141
#输出四缸车和六缸车每一gear水平的mpg和disp的平均值
sqldf("
selectavg(mpg)asavg_mpg,avg(disp)asavg_disp,gearfrommtcarswherecylin(4,6)groupbygear"
avg_mpgavg_dispgear
120.33333201.03333
224.53333123.01674
325.36667120.13335
七、简单随机抽样
用少量数据测试数据集时,常用随机抽样方法从整体中选出部分样本数据。
简单随机抽样,是指从总体N个样本中任意抽取n个样本,每个样本被抽中的概率相等;
分为重复抽样(有放回)、不重复抽样(不放回)。
使用sampling包实现。
1.有放回简单随机抽样
函数srswr(),基本格式为:
srswr(n,N)
表示从总体N中有放回地随机抽取n个样本,返回一个长度为N的向量,每个分量分别表示各元素被抽取到的次数。
library(sampling)
LETTERS
[1]"
E"
G"
H"
I"
J"
K"
[12]"
L"
N"
O"
P"
Q"
R"
S"
T"
U"
V"
[23]"
W"
X"
Y"
Z"
s<
-srswr(10,26)
s
[1]20110000100200030000000
[24]000
ind<
-(1:
26)[s!
=0]#被抽到的样本编号
ind
[1]13491216
n<
-s[s!
=0]#被抽到的样本的被抽到的次数
n
[1]211123
-rep(ind,times=n)#按次数重复被抽到的样本编号
[1]113491212161616
sample<
-LETTERS[ind]#被抽到的字母
sample
2.不放回简单随机抽样
函数srswor(),格式和返回值同srswr(),注意返回值向量中只有0和1.
-srswor(10,26)
[1]1000010100100000011
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 学习 系列 17 数据 整合 基本 操作 汇总