R语言数据结构——数据框
- 数据框的创建
- data.frame()函数创建
- 由矩阵转数据框
- 数据框增加
- 添加新的一列
- 添加新的一行
- 数据框的删除
- 行的删除
- 列的删除
- 数据框的查找
- 指定行的查找
- 指定列的查找
- which()函数的使用
- 数据框的修改
- 总结
数据框作为数据分析中常用的数据结构,其优势在于他可以存储多种数据形式,并不会局限于单独某一种数据形式。对应的处理方法也就对应的多一些,本文将从数据框的增删查改四个方面去简述数据框的处理。
数据框的创建
data.frame()函数创建
data.frame()是数据框在R语言里的标识方式,也是用于创建数据框的常用形式。
data.frame(…, row.names = NULL, check.rows = FALSE,
check.names = TRUE, fix.empty.names = TRUE,
stringsAsFactors = default.stringsAsFactors())
参数解释:
参数 | 解释 |
… | 需要创建的数据 |
row.names | 数据框的行名,通常为一个向量 |
check.rows | 检查row.names的长度与数据框的行数是否相同 |
stringAsFactors | 对字符串的处理,TRUE时,将字符串改为因子类型, FALSE时,不改变字符串的类型 |
ID <- c(101,102,103,104,105,106)
name <- c('Tom','Bob','Tim','王二','张三','李四')
math_score <- c(88,70,65,77,64,80)
data_1 <- data.frame(ID,name,score,stringsAsFactors = F)
##查看数据形式
sapply(data_1, class) # "numeric" "character" "numeric"
由矩阵转数据框
首先得有矩阵,然后利用as.data.frame()函数将矩阵转化为数据框。
x_1 <- seq(1:12)
x_2 <- matrix(x_1,nrow = 3,ncol = 4,byrow = T)
data_1 <- as.data.frame(x_2)
数据框增加
添加新的一列
新添加一个列名,然后赋值语句添加一个向量即可。或者可以列的角标进行添加赋值。
注 :添加的列的向量长度必须与数据框行数相同。
ID <- c(101,102,103,104,105,106)
name <- c('Tom','Bob','Tim','王二','张三','李四')
math_score <- c(88,70,65,77,64,80)
data_1 <- data.frame(ID,name,math_score,stringsAsFactors = F)
data_1$English_socer <- c(99,86,75,77,78,84)
data_1[,ncol(data_1)+1] <- c(99,86,75,77,78,84)
添加新的一行
添加新的一行可以使用行角标进行赋值。
ID <- c(101,102,103,104,105,106)
name <- c('Tom','Bob','Tim','王二','张三','李四')
math_score <- c(88,70,65,77,64,80)
data_1 <- data.frame(ID,name,math_score,stringsAsFactors = F)
data_1[nrow(data_1)+1,] <- c(107,'Tony',54)
数据框的删除
行的删除
行的删除一般用下角标进行删除。
在这里插入代码片ID <- c(101,102,103,104,105,106)
name <- c('Tom','Bob','Tim','王二','张三','李四')
math_score <- c(88,70,65,77,64,80)
data_1 <- data.frame(ID,name,math_score,stringsAsFactors = F)
data_1[-2,] # 删除指定行
data_1[-c(1,4),] # 删除吃c()向量里的行数
列的删除
列的删除方式与行一样,一种于行一样利用下角标去删除。
ID <- c(101,102,103,104,105,106)
name <- c('Tom','Bob','Tim','王二','张三','李四')
math_score <- c(88,70,65,77,64,80)
data_1 <- data.frame(ID,name,math_score,stringsAsFactors = F)
data_1[-2] # 删除指定列
data_1[-c(1,2)] # 删除c()向量里的列数
数据框的查找
与矩阵的索引一样,可以查找指定行、列或固定元素等。
指定行的查找
根据下角标可指定对应的行数。
```python
ID <- c(101,102,103,104,105,106)
name <- c('Tom','Bob','Tim','王二','张三','李四')
score <- c(88,70,65,77,64,80)
data_1 <- data.frame(ID,name,score,stringsAsFactors = F)
data_1[1,] # 101 Tom 88
data_1[1:2,] # 第一二行
指定列的查找
列的查找可以和行的查找一样,也可以按照名字查找。
ID <- c(101,102,103,104,105,106)
name <- c('Tom','Bob','Tim','王二','张三','李四')
score <- c(88,70,65,77,64,80)
data_1 <- data.frame(ID,name,score,stringsAsFactors = F)
data_1[,2]
data_1[1:2]
data_1$name
which()函数的使用
与向量篇讲解的which函数一样,which函数返回的是满足条件的下角标,因此需要使用索引。
ID <- c(101,102,103,104,105,106)
name <- c('Tom','Bob','Tim','王二','张三','李四')
score <- c(88,70,65,77,64,80)
data_1 <- data.frame(ID,name,score,stringsAsFactors = F)
data_1[which(data_1$name=='张三'),] # 查询张三所在行的信息
data_1$score[which(data_1$name=='张三')] # 查询张三的成绩
数据框的修改
数据框的修改与矩阵的修改一样,先查询到需要修改的位置,然后利用赋值语句进行修改。
data_1$score[which(data_1$name=='张三')] <- 52
data_1[which(data_1$name=='张三'),] <- c(114,'李白',96)
总结
数据框是数据分析的常用数据形式,但其操作并不难,懂得数据框索引的原理是重点。对应的增删查改不过是简单的赋值,删除而已。