数据框
2018-08-31
2018-08-31
数据结构-数据框
数据框用于组织多个存储类型不相同的变量,数据框是由一系列的列向量组成,可以看做是矩阵的扩充。
1 建立数据框
G.goods <-c("A","B","C")
G.price <-c(40.40,40.56,23.02)
G.type <-c("优","良","中")
*G.goods:商品的字符向量
*G.price:价格的数值向量
*G.type:种类的字符向量
- R的数据框的基本语句为:data.frame(域名1=向量名1,域名2=向量名2,…)
df<- data.frame(G.goods=c("A","B","C"),G.price=c(40.40,40.56,23.02),G.type=c("优","良","中"))
df
## G.goods G.price G.type
## 1 A 40.40 优
## 2 B 40.56 良
## 3 C 23.02 中
通过行列号访问数据框的第一行
print(df[1,])
## G.goods G.price G.type
## 1 A 40.4 优
通过行列号访问数据框的第二列
print(df[,2])
## [1] 40.40 40.56 23.02
用列名称更好、更直观的访问数据框
print(df$G.goods)
## [1] A B C
## Levels: A B C
2 数据框更改
1)更改1列名称
将第二列名称G.price更改为price
names(df)[2] <-"price"
df
## G.goods price G.type
## 1 A 40.40 优
## 2 B 40.56 良
## 3 C 23.02 中
2)更改全部列名
更改数据框df列名(全部更改),分别改为“goods”,“price”,“type”。
names(df) <-c("goods","price","type")
df
## goods price type
## 1 A 40.40 优
## 2 B 40.56 良
## 3 C 23.02 中
3 数据框的查询
1)查看各个域名
names(df) # 查询数据框的列名
## [1] "goods" "price" "type"
2)查看goods、type(商品的名称和种类)
df[,"goods"] # 商品A B C
## [1] A B C
## Levels: A B C
访问数据框df信息
df[,"type"] # 种类优 良 中
## [1] 优 良 中
## Levels: 良 优 中
3)通过符号[ ]查看数据
[ ]里逗号前表示查看行数据
如:[1,]表示查看第一行的数据,同理:[3,]表示查看第三行数据
df[1, ] # 查看A物品的信息
## goods price type
## 1 A 40.4 优
执行后结果显示第1行价格为40.4的A物品种类为优。
df[2, "type"] # 查看B物品的(type)种类
## [1] 良
## Levels: 良 优 中
表示查看第2行,type列的信息为良
4 数据框数据的增加
1.列数据cbind()
例:给数据框新增加一列名为amount的数据,amount列数据分别为33,24,45。
amount <-c(33,24,45)# amount:数量的数值向量
A.df <-data.frame(amount) # 将新增的amount变成数据框A.df
Add.df<- cbind(df,A.df)# 将原先数据数据框df与A.df合并
Add.df
## goods price type amount
## 1 A 40.40 优 33
## 2 B 40.56 良 24
## 3 C 23.02 中 45
str()查看数据框的结构
str(Add.df)
## 'data.frame': 3 obs. of 4 variables:
## $ goods : Factor w/ 3 levels "A","B","C": 1 2 3
## $ price : num 40.4 40.6 23
## $ type : Factor w/ 3 levels "良","优","中": 2 1 3
## $ amount: num 33 24 45
通过str()查看到goods和type本身为字符型变量,但在建立数据框时变成了因子型变量。因此对其进行更改。两种方法更改:
1)as.存储类型名(数据对象名)
A.df <-data.frame(amount) # 将新增的amount变成数据框A.df
Add.df<- cbind(df,A.df)# 将原先数据数据框df与A.df合并
str(Add.df)
## 'data.frame': 3 obs. of 4 variables:
## $ goods : Factor w/ 3 levels "A","B","C": 1 2 3
## $ price : num 40.4 40.6 23
## $ type : Factor w/ 3 levels "良","优","中": 2 1 3
## $ amount: num 33 24 45
查看存储类型
Add.df$goods=as.character(Add.df$goods)
Add.df$type =as.character(Add.df$type )
str(Add.df)
## 'data.frame': 3 obs. of 4 variables:
## $ goods : chr "A" "B" "C"
## $ price : num 40.4 40.6 23
## $ type : chr "优" "良" "中"
## $ amount: num 33 24 45
2)增加参数“stringsAsFactors=FALSE”
stringsAsFactors = FALSE,意味着,在读入数据时,遇到字符串后,不将其转换为factors,仍然保留为字符串格式。
df<- data.frame(goods=c("A","B","C"),price=c(40.40,40.56,23.02),type=c("优","良","中"),amount=c(33,24,45)) #R默认情况下为因子
str(df)
## 'data.frame': 3 obs. of 4 variables:
## $ goods : Factor w/ 3 levels "A","B","C": 1 2 3
## $ price : num 40.4 40.6 23
## $ type : Factor w/ 3 levels "良","优","中": 2 1 3
## $ amount: num 33 24 45
df<- data.frame(goods=c("A","B","C"),price=c(40.40,40.56,23.02),type=c("优","良","中"),amount=c(33,24,45),stringsAsFactors=FALSE) #加入参数后变为字符型
str(df)
## 'data.frame': 3 obs. of 4 variables:
## $ goods : chr "A" "B" "C"
## $ price : num 40.4 40.6 23
## $ type : chr "优" "良" "中"
## $ amount: num 33 24 45
2.行数据增加 使用rbind()函数增加。例如:假使有商品“D”,价格“40.5”,种类“优”,数量“48”,加入数据框,如下:
NEW.df <-rbind(Add.df,c("D","40.5","优","48"))
NEW.df
## goods price type amount
## 1 A 40.4 优 33
## 2 B 40.56 良 24
## 3 C 23.02 中 45
## 4 D 40.5 优 48