文章目录
查看数据框内容
| 函数 | 解释 |
|---|---|
head() | 显示数据集前几行 |
tail() | 显示数据集后几行 |
str() | 数据集概览 |
attributes() | 更详细的数据集信息查看 |
des() | 数据集中变量基本信息查看 |
以epiDisplay包下的Familydata数据集为例:
> library(epiDisplay)
> data("Familydata")
- 直接输入数据框名称:等价于使用
print()函数- 对于比较大的数据框,会占用很多屏幕
head(somedataframe,n=N):只显示数据框的前N行,默认为6
> head(Familydata)
code age ht wt money sex
1 K 6 120 22 5 F
2 J 16 172 52 50 M
3 A 80 163 71 100 M
4 I 18 158 51 200 F
5 C 69 153 51 300 F
6 B 72 148 60 500 F
tail(somedataframe,n=N):只显示数据框的后N行,默认为6
> tail(Familydata)
code age ht wt money sex
6 B 72 148 60 500 F
7 G 46 160 50 500 F
8 H 42 163 55 600 F
9 D 58 170 67 2000 M
10 F 47 155 53 2000 F
11 E 49 167 64 5000 M
names(somedataframe):只显示数据框中的变量名
> names(Familydata)
[1] "code" "age" "ht" "wt" "money" "sex"
str(somedataframe):探索数据框结构
> str(Familydata)
'data.frame': 11 obs. of 6 variables:
# 对象的类型为数据框,有11个观测数,6个变量
$ code : chr "K" "J" "A" "I" ...
$ age : int 6 16 80 18 69 72 46 42 58 47 ...
$ ht : int 120 172 163 158 153 148 160 163 170 155 ...
$ wt : int 22 52 71 51 51 60 50 55 67 53 ...
$ money: int 5 50 100 200 300 500 500 600 2000 2000 ...
$ sex : Factor w/ 2 levels "F","M": 1 2 2 1 1 1 1 1 2 1 ...
# 列举了数据框中所有变量的类型、前几个取值,对于因子还给出了因子的水平
- attr(*, "datalabel")= chr "Anthropometric and financial data of a hypothetical family" # 数据集的概述
- attr(*, "time.stamp")= chr "23 Nov 2006 17:15" # 数据建立时间
- attr(*, "formats")= chr [1:6] "%9s" "%8.0g" "%8.0g" "%8.0g" ... # 数据呈现格式
- attr(*, "types")= int [1:6] 128 98 105 98 105 108
- attr(*, "val.labels")= chr [1:6] "" "" "" "" ... # 变量标签
- attr(*, "var.labels")= chr [1:6] "" "Age(yr)" "Ht(cm.)" "Wt(kg.)" ...
- attr(*, "version")= int 7 # 版本号
- attr(*, "label.table")=List of 6
# 给出了数据框的一些属性 (-attr)
..$ sex1: Named num [1:2] 1 2
.. ..- attr(*, "names")= chr [1:2] "F" "M"
..$ : NULL
..$ : NULL
..$ : NULL
..$ : NULL
..$ : NULL
attributes(somedataframe):给出数据框的全部属性信息
$names
[1] "code" "age" "ht" "wt" "money" "sex"
$row.names
[1] 1 2 3 4 5 6 7 8 9 10 11
$class
[1] "data.frame"
$datalabel
[1] "Anthropometric and financial data of a hypothetical family"
$time.stamp
[1] "23 Nov 2006 17:15"
$formats
[1] "%9s" "%8.0g" "%8.0g" "%8.0g" "%8.0g" "%8.0g"
$types
[1] 128 98 105 98 105 108
$val.labels
[1] "" "" "" "" "" "sex1"
$var.labels
[1] "" "Age(yr)" "Ht(cm.)"
[4] "Wt(kg.)" "Pocket money(B.)" ""
$version
[1] 7
$label.table
$label.table$sex1
F M
1 2
$label.table[[2]]
NULL
$label.table[[3]]
NULL
$label.table[[4]]
NULL
$label.table[[5]]
NULL
$label.table[[6]]
NULL
- 查看和修改数据框的属性:使用函数
attributes(somedataframe)$someattribute
> attributes(Familydata)$var.labels # 显示该数据框中所有变量的标签 (起到对变量的解释作用)
[1] "" "Age(yr)" "Ht(cm.)"
[4] "Wt(kg.)" "Pocket money(B.)" ""
> attributes(Familydata)$var.labels[1]<-"ID code" # 使用向量操作,对属性进行修改
> attributes(Familydata)$var.labels[6]<-"Gender"
> attributes(Familydata)$var.labels
[1] "ID code" "Age(yr)" "Ht(cm.)"
[4] "Wt(kg.)" "Pocket money(B.)" "Gender" # 可以看到,标签的第1、6项被修改了
- 查看变量的基本信息和标签:使用epiDisplay包中的
des()函数
des(Familydata)
Anthropometric and financial data of a hypothetical family # 数据集的概述
No. of observations = 11 # 观测数
Variable Class Description
1 code character ID code
2 age integer Age(yr)
3 ht integer Ht(cm.)
4 wt integer Wt(kg.)
5 money integer Pocket money(B.)
6 sex factor Gender # 所有变量的名称、类型、标签
选取数据框的子集
行列限定语法
- 和矩阵操作类似,使用
somedataframe[somerow,somecol]语法。 - 选取某几行数据
> Familydata[1:3,]
code age ht wt money sex
1 K 6 120 22 5 F
2 J 16 172 52 50 M
3 A 80 163 71 100 M
- 选取某几列数据
> Familydata[,c("code","age","sex")]
code age sex
1 K 6 F
2 J 16 M
3 A 80 M
4 I 18 F
5 C 69 F
6 B 72 F
7 G 46 F
8 H 42 F
9 D 58 M
10 F 47 F
11 E 49 M
- 使用逻辑表达式,选取符合特定条件的个案
> Familydata[Familydata$sex=="F",] # 选取sex变量为"F"的所有个案
code age ht wt money sex
1 K 6 120 22 5 F
4 I 18 158 51 200 F
5 C 69 153 51 300 F
6 B 72 148 60 500 F
7 G 46 160 50 500 F
8 H 42 163 55 600 F
10 F 47 155 53 2000 F
使用函数subset()
语法:subset(somedataframe, 变量限定条件, select=选取的变量构成的列向量)
subset(Familydata,sex=="F") # 选取sex变量为"F"的所有个案
subset(Familydata,sex=="F",select=c("code","sex")) # 选取sex变量为"F"的所有个案的code、sex变量列
使用函数sample()实现随机抽样
- 语法:
sample(somevector,size=N,replace=TRUE/FALSE)somevector:抽样来源的列向量size:抽取样本的大小replace:用于限定是否为放回抽样
> S<-sample(1:10,size=3,replace = FALSE) # 从1~10中随机抽出3个数
> S
[1] 2 10 6
- 与子集选择语法结合,实现从数据集中随机抽样
> sample.rows<-sample(1:nrow(Familydata),size=3,replace = FALSE) # nrow函数将返回数据框的个案数
> Familydata[sample.rows,]
code age ht wt money sex
7 G 46 160 50 500 F
6 B 72 148 60 500 F
9 D 58 170 67 2000 M
对个案进行排序
语法:somedataframe[order(somedataframe$somevariable),]
order()函数中默认对变量进行升序排序,若需要降序排序,需要声明参数decreasing=TRUE
> Familydata[order(Familydata$age,decreasing = TRUE),] # 对数据集中的个案以age降序进行排序
code age ht wt money sex
3 A 80 163 71 100 M
6 B 72 148 60 500 F
5 C 69 153 51 300 F
9 D 58 170 67 2000 M
11 E 49 167 64 5000 M
10 F 47 155 53 2000 F
7 G 46 160 50 500 F
8 H 42 163 55 600 F
4 I 18 158 51 200 F
2 J 16 172 52 50 M
1 K 6 120 22 5 F
查找和删除重复数据
查找重复数据
duplicated(somevector):对某一向量,逐个元素地检查该元素是否与前面任一元素重复,并返回一由逻辑值组成的向量 (若不重复,返回FALSE,否则返回TRUE)
> A<-c(1,2,3,2)
> duplicated(A)
[1] FALSE FALSE FALSE TRUE
any(somelogicvariable):对某一全由逻辑值构成的向量,检查其是否有任一元素为TRUE;若全为FALSE,返回FALSE,否则返回TRUE
> any(duplicated(Familydata$code)) #检查数据框中code变量是否有重复值
[1] FALSE
删除重复数据
somedataframe[!duplicated(somedataframe$somevector),]:查找并删除某数据框中某变量取值重复的所有个案,输出一个新的数据框
> ID=c(1,2,3,4,4)
> age=c(12,14,15,16,16)
> score=c(90,85,80,72,72)
> M=data.frame(ID,age,score)
> M
ID age score
1 1 12 90
2 2 14 85
3 3 15 80
4 4 16 72
5 4 16 72
> M.nodup<-M[!duplicated(M$ID),] # 查找M中ID变量有重复的所有个案并删除,结果保存于M.nodup
> M.nodup
ID age score
1 1 12 90
2 2 14 85
3 3 15 80
4 4 16 72
添加和删除变量
添加变量
somedataframe$newvector<-somedefinition:以声明新向量的形式加入新变量
> M$logscore<-log10(M$score) # 计算变量并赋值为新变量
> M
ID age score logscore
1 1 12 90 1.954243
2 2 14 85 1.929419
3 3 15 80 1.903090
4 4 16 72 1.857332
5 4 16 72 1.857332
transform(somedataframe, somenewvector=somedefinition):以transform函数定义新变量
# 上例中M$logscore<-log10(M$score)的等价写法:
transform(M,logscore=log10(score))
删除变量
somedataframe[,-somevariablenumber]:从数据框中删除特定序号的变量
> M
ID age score
1 1 12 90
2 2 14 85
3 3 15 80
4 4 16 72
5 4 16 72
> M[,-3] # 将M的第3列删除
ID age
1 1 12
2 2 14
3 3 15
4 4 16
5 4 16
somedataframe$somevector<-NULL:在原数据框上操作,将某变量设定为空值 (永久删除)
将数据框加入搜索路径
attach(somedataframe):将数据框加入搜索路径,如此可以直接引用其中变量而无需声明其所在的数据框
> M
ID age score
1 1 12 90
2 2 14 85
3 3 15 80
4 4 16 72
5 4 16 72
> age
错误: 找不到对象'age'
> attach(M) # 将数据框M加入搜索路径
> age
[1] 12 14 15 16 16 # 如此可以检索到M下的变量age
search():查看目前搜索路径下有哪些内容detach(somedataframe):将数据框从搜索路径中移除
> detach(M) # 将M从搜索路径中移除
> age
错误: 找不到对象'age'
本文介绍了如何使用R语言的基本包来操作数据框,包括查看数据框内容、选取子集、排序、处理重复数据、添加删除变量以及将数据框加入搜索路径。详细讲解了如、`head()`, `tail()`, `str()`, `attributes()`等函数的用法,以及行列限定语法和随机抽样的实现。"
121360929,7467629,使用ArcGIS API进行地图交互绘图,"['GIS开发', 'ArcGIS', 'JavaScript', '前端框架', '地图API']
3987

被折叠的 条评论
为什么被折叠?



