数据框

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