网站首页 > 技术文章 正文
2.2.4 数据框
数据框(data.frame)是R中最常处理的数据结构。
函数:data.frame(col1,col2,col3,….,row.name=NULL, check.rows = FALSE, check.names=TRUE, stringsAsFactors = default.stringsAsFactors())
其中的列向量col1, col2, col3,…可为任何类型(如字符型、数值型或逻辑型)。每一列的 名称可由函数names指定。row.name用于指定各行(样本)的名称,默认没有名称,使用从1开始自增的序列来标识每一行;check.rows用于用来检查行的名称和数量是否一致,默认为FALSE;check.names来检查变量(列)的名称是否唯一且符合语法,默认为TRUE;stringsAsFactors用来描述是否将字符型向量自动转换为因子,默认转换,若不改变的话使用stringsAsFactors = FALSE来指定即可。 每一列数据的模式必须唯一,不过你却可以将多个模式的不同列放到一起组成数据框。
1.创建数据框
A <- data.frame(name = c("one", "two", "three", "four", "five", "six", "seven", "eight"), values = c(1, 2, 3, 4, 5, 6, 7, 8), values2 = c(8, 7, 6, 5, 4, 3, 2, 1), row.names = c("r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8")) # 使用data.frame函数创建数据框A,行名定义为r1到r8。
A # 显示结果A。
## name values values2
## r1 one 1 8
## r2 two 2 7
## r3 three 3 6
## r4 four 4 5
## r5 five 5 4
## r6 six 6 3
## r7 seven 7 2
## r8 eight 8 1
name <- c("one", "two", "three", "four", "five", "six", "seven", "eight") # 构建字符型向量name。
values <- c(1, 2, 3, 4, 5, 6, 7, 8) # 构建数值型向量values。
values2 <- c(8, 7, 6, 5, 4, 3, 2, 1) # 构建数值型向量values2。
A <- data.frame(name, values, values2, row.names = c("r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8")) # 创建数据框A。
A # 显示结果A。
## name values values2
## r1 one 1 8
## r2 two 2 7
## r3 three 3 6
## r4 four 4 5
## r5 five 5 4
## r6 six 6 3
## r7 seven 7 2
## r8 eight 8 1
2.数据框索引
R语言的下标索引是从1开始的,且下标索引为负数的话表示删除某个元素,[行下标, 列下标]
A[4,] # 返回数据框A第4行。
## name values values2
## r4 four 4 5
A[,2] # 返回数据框A第2列。
## [1] 1 2 3 4 5 6 7 8
A[4,1] # 返回数据框A第4行,第1列。
## [1] "four"
A[1:4,] # 返回数据框A第1至第4行。
## name values values2
## r1 one 1 8
## r2 two 2 7
## r3 three 3 6
## r4 four 4 5
A[,1:2] # 返回数据框A第1至第2列。
## name values
## r1 one 1
## r2 two 2
## r3 three 3
## r4 four 4
## r5 five 5
## r6 six 6
## r7 seven 7
## r8 eight 8
A[c(1,4),c(1,3)] # 返回数据框A第1和第4行,第1和第3列的数据。
## name values2
## r1 one 8
## r4 four 5
A$values # 返回数据框第2列。$符可以选取数据框中的某列,$前是数据框名,$后是列名。
## [1] 1 2 3 4 5 6 7 8
A[,-3] # 提取第3列以外的其他数据。
## name values
## r1 one 1
## r2 two 2
## r3 three 3
## r4 four 4
## r5 five 5
## r6 six 6
## r7 seven 7
## r8 eight 8
A[4,"name"] # 通过指定列名,返回到具体值。
## [1] "four"
A[2] # 直接得到一个新的数据框,仅包含原数据框A的第2列。[]中输入想要得到的列号就可以。
## values
## r1 1
## r2 2
## r3 3
## r4 4
## r5 5
## r6 6
## r7 7
## r8 8
A[[2]] # 访问第2列。
## [1] 1 2 3 4 5 6 7 8
A[c(1,2)] # 得到新数据框,数据框含原数据框A的列1和列2。
## name values
## r1 one 1
## r2 two 2
## r3 three 3
## r4 four 4
## r5 five 5
## r6 six 6
## r7 seven 7
## r8 eight 8
A[which(A$values < 4),] # 返回数据框values列小于4的数据,which可以输入<,>等其他条件。
## name values values2
## r1 one 1 8
## r2 two 2 7
## r3 three 3 6
A[which(A$values < 4),"name"] # 返回name列中符合条件为values列中小于4的数据。
## [1] "one" "two" "three"
A[which(A$values < 2 | A$values > 6),] # 返回数据框A中values小于2或大于6的数据。
## name values values2
## r1 one 1 8
## r7 seven 7 2
## r8 eight 8 1
A[which(A$values > 4 & A$values < 6),] # 返回数据框A中values大于4与小于6的数据。
## name values values2
## r5 five 5 4
A[-which(A$values > 4 & A$values < 6),] # 返回数据框A中values列大于4,小于6以外的数据,相对于上列进行了条件反转。
## name values values2
## r1 one 1 8
## r2 two 2 7
## r3 three 3 6
## r4 four 4 5
## r6 six 6 3
## r7 seven 7 2
## r8 eight 8 1
attach、detach和with()
函数attach()可将数据框添加到R的搜索路径中。
函数detach()将数据框从搜索路径中移除。
函数attach()和detach()最好在你分析一个单独的数据框,并且不太可能有多个同名对象时使用。
with()就是把所有操作都限制在数据框上。
attach(A) # 将数据框A加入搜索路径。
## The following objects are masked _by_ .GlobalEnv:
##
## name, values, values2
values # 显示数据框A中的values列。可以看出调用values列可以直接在程序中输入列名values,而不用再输入A$values。detach是与attach相反的操作。
## [1] 1 2 3 4 5 6 7 8
A1 <- data.frame(name = c("n1", "n2", "n3", "n4", "n5", "n6", "n7", "n8"), values = c(2, 1, 4, 3, 6, 5, 8, 7), values2 = c(2, 3, 5, 2, 4, 4, 6, 5)) # 创建数据框A1。
A1 # 显示数据框A1。
## name values values2
## 1 n1 2 2
## 2 n2 1 3
## 3 n3 4 5
## 4 n4 3 2
## 5 n5 6 4
## 6 n6 5 4
## 7 n7 8 6
## 8 n8 7 5
with(A1, {plot(values, values2)}) # 虽然数据框A和A1有相同的列名称,但是这里用with函数后,{}中只调用数据框A1中的values和values2。
with(A1, {name1 <<- name}) # 想在with函数中对全局的变量进行赋值,那么需要使用<<-运算符。
name1 # 显示name1。
## [1] "n1" "n2" "n3" "n4" "n5" "n6" "n7" "n8"
3.查看数据框
head(A) # 查看数据前6行。
## name values values2
## r1 one 1 8
## r2 two 2 7
## r3 three 3 6
## r4 four 4 5
## r5 five 5 4
## r6 six 6 3
head(A, 3) # 查看数据框A前3行数据。
## name values values2
## r1 one 1 8
## r2 two 2 7
## r3 three 3 6
tail(A) # 查看数据后6行。
## name values values2
## r3 three 3 6
## r4 four 4 5
## r5 five 5 4
## r6 six 6 3
## r7 seven 7 2
## r8 eight 8 1
tail(A, 5) # 查看数据后5行。
## name values values2
## r4 four 4 5
## r5 five 5 4
## r6 six 6 3
## r7 seven 7 2
## r8 eight 8 1
print(A) # 查看数据框A。
## name values values2
## r1 one 1 8
## r2 two 2 7
## r3 three 3 6
## r4 four 4 5
## r5 five 5 4
## r6 six 6 3
## r7 seven 7 2
## r8 eight 8 1
A # 也可以直接输入数据框名称查看数据。也可以在R studio种的环境界面直接点击A查看。
## name values values2
## r1 one 1 8
## r2 two 2 7
## r3 three 3 6
## r4 four 4 5
## r5 five 5 4
## r6 six 6 3
## r7 seven 7 2
## r8 eight 8 1
length(A[,1]) # 查看数据框行数量。
## [1] 8
length(A[1,]) # 查看数据框列数量。
## [1] 3
length(A$name) # 查看数据框A中列name的数量。
## [1] 8
colnames(A) # 查看数据框列名。
## [1] "name" "values" "values2"
rownames(A) # 查看数据框行名。
## [1] "r1" "r2" "r3" "r4" "r5" "r6" "r7" "r8"
dim(A) # 显示数据框A的维度。8行,3列。
## [1] 8 3
str(A) # 查看数据框A的数据结构。
## 'data.frame': 8 obs. of 3 variables:
## $ name : chr "one" "two" "three" "four" ...
## $ values : num 1 2 3 4 5 6 7 8
## $ values2: num 8 7 6 5 4 3 2 1
class(A) # 查看数据框类型。
## [1] "data.frame"
class(A$values) #查看数据框列的类型。
## [1] "numeric"
mode(A$name) # 显示数据框A中name列的模式。
## [1] "character"
summary(A) # 数据框基本描述性统计。
## name values values2
## Length:8 Min. :1.00 Min. :1.00
## Class :character 1st Qu.:2.75 1st Qu.:2.75
## Mode :character Median :4.50 Median :4.50
## Mean :4.50 Mean :4.50
## 3rd Qu.:6.25 3rd Qu.:6.25
## Max. :8.00 Max. :8.00
duplicated(A$values) # 查询数据框A中values列是否有重复数据,若有会返回TRUE,若无,返回FLASE。
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
- 上一篇: 详解java中float与double的区别
- 下一篇: R语言从入门到精通:Day3
猜你喜欢
- 2024-12-06 大数据分析R语言RStudio使用教程
- 2024-12-06 R语言—从原始数据到单因素,到组间比较,简直保姆级教程
- 2024-12-06 R语言学习笔记(四)—pheatmap
- 2024-12-06 把数据输入R语言后,如何进行简单的操作(二)
- 2024-12-06 R数据分析:Lasso回归筛选变量构建Cox模型并绘制列线图
- 2024-12-06 R语言从入门到精通:Day3
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)