当前位置: 首页 > news >正文

R语言基础| 创建数据集

在R语言中,有多种数据类型,用以存储和处理数据。每种数据类型都有其特定的用途和操作函数,使得R语言在处理各种数据分析任务时非常灵活和强大:

向量(Vector): 向量是R语言中最基本的数据类型,它是由相同类型的元素构成的一维数组。例如,一个由数值组成的向量或一个由字符串组成的向量。

矩阵(Matrix): 矩阵是一个二维数组,其中的数据元素按照行和列的形式排列。矩阵中的所有元素必须是同一类型。

数组(Array): 数组是向量的一种扩展,可以有多维。例如,你可以有一个三维数组,其中包含多个二维矩阵。

数据框(Data Frame): 数据框是R语言中用于存储表格数据的最重要的数据类型。它类似于数据库中的表或Excel中的电子表格。数据框可以包含不同类型的列(数值、字符、逻辑等)。

列表(List): 列表是一种复合数据类型,可以包含任意类型的元素(数值、字符、向量、矩阵、甚至其他列表等),并且各元素的长度也可以不同。

因子(Factor): 因子是用于分类数据的数据类型。它们用于表示有限的分类值集,例如性别(男、女)、评级(优、良、差)等。

逻辑值(Logical): 逻辑值是R语言中的布尔类型,代表真(TRUE)或假(FALSE)。

2.1 理解数据集

行(row):表示观测值 列(col):表示变量

2.2 数据结构

包括标量、向量、矩阵、数组、数据框、列表。

2.2.1 向量(vector)

  • 2.2.1.1 定义

是用于存储数值型、字符型逻辑型数据的一维数组。例如:

a <- c(1,2,3,4,5,6,-2,4)
b <- c("one","two","three","four")
c <- c(TRUE,TRUE,TRUE,FALSE,FALSE)

a为数值型向量,b字符型(必须加”“),c逻辑型向量。

单个向量中的数据类型必须相同

标量(scalar)是只含一个元素的向量。eg g<-1

  • 2.2.1.2 访问向量中的元素

注:R中位置索引从1开始,而不是0

1)访问单个元素

a <- c("k","q","e","f","a","w","p","m")
a[3]
## [1] "e"

2)访问多个元素

a <- c("k","q","e","f","a","w","p","m")
a[c(1,2,4,6)]
## [1] "k" "q" "f" "w"

3)连续访问多个元素

a <- c("k","q","e","f","a","w","p","m")
a[c(2:6)]
## [1] "q" "e" "f" "a" "w"

2.2.2 矩阵(matrix)

  • 2.2.2.1 定义

是一个二维数组,只是每个元素都拥有相同的模式(数值型、字符型或逻辑型)。

可以通过函数matrix()创建矩阵,格式如下:

mymatrix <- matrix(vector,nrow = number_of_rows,ncol = number_of_columns,byrow = logical_value,dimnames = list(char_vector_rownames,char_vector_colnames))

vector:矩阵的元素

nrow:行的维数

ncol:列的维数

dimnames:可选的、以字符型向量表示的行名和列名,如果没有设定可以不写

byrow = TRUE:矩阵按行填充,byrow = FALSE:矩阵按列填充。**如果不做设定,默认情况下按列填充。

因此,创建矩阵时至少包括vector,nrow,ncol

  • 2.2.2.2 创建矩阵
y <- matrix(1:20,nrow = 5,ncol = 4)
y
##      [,1] [,2] [,3] [,4]
## [1,]    1    6   11   16
## [2,]    2    7   12   17
## [3,]    3    8   13   18
## [4,]    4    9   14   19
## [5,]    5   10   15   20
cells <- c(1,26,24,68)
rnames <- c("R1","R2")
cnames <- c("C1","C2")
mymatrix1 <- matrix(cells,nrow = 2,ncol = 2,byrow = FALSE,dimnames = list(rnames,cnames))
mymatrix1
##    C1 C2
## R1  1 24
## R2 26 68

可以看到优先按列填充,且行名为rnames,列名为cnames。

下面改变一些参数:

cells <- c(1,26,24,68)
rnames <- c("R1","R2")
cnames <- c("C1","C2")
mymatrix2 <- matrix(cells,nrow = 2,ncol = 2,byrow = TRUE,dimnames = list(cnames,rnames))
mymatrix2
##    R1 R2
## C1  1 26
## C2 24 68

可以看的变成了优先按行填充,行名变为cnames,列名变为rnames。

2.2.3 访问矩阵中的元素

使用下标和方括号来选择矩阵中的行、列或元素。

x[i,]:矩阵x中的第i行

x[,j]:矩阵x中的第j列

x[i,j]:矩阵x中第i行第j列个元素

x[i,c(h,j)]:矩阵x中第i行,第h和j列

x[c(h:i),j]:矩阵x中第h-i行,第j列

举例

x <- matrix(21:40,nrow = 4,ncol = 5 )
x
##      [,1] [,2] [,3] [,4] [,5]
## [1,]   21   25   29   33   37
## [2,]   22   26   30   34   38
## [3,]   23   27   31   35   39
## [4,]   24   28   32   36   40
x[1,]
## [1] 21 25 29 33 37
x[,5]
## [1] 37 38 39 40
x[c(1,2,3),5]
## [1] 37 38 39
x[c(2:4),c(2:4)]
##      [,1] [,2] [,3]
## [1,]   26   30   34
## [2,]   27   31   35
## [3,]   28   32   36

矩阵也只能包含一种数据类型,当维度超过2时,可以使用数组

2.2.3 数组(array)

  • 2.2.3.1 定义

数组(array)与矩阵类似,但是维度可以大于2,即可以是三维的。

通过函数array()创建:

myarray <- array(vector,dimensions,dimnames)

vector:数组中的数据

dimensions:数值型向量,给出了各个维度下标的最大值,按行,列,面进行排序

dimnames:可选的、各维度名称标签的列表

  • 2.2.3.2 创建数组
dim1 <- c("A1","A2")
dim2 <- c("B1","B2","B3")
dim3 <- c("C1","C2","C3","C4")
z <- array(1:24,c(2,3,4),dimnames = list(dim1,dim2,dim3))
z
## , , C1
## 
##    B1 B2 B3
## A1  1  3  5
## A2  2  4  6
## 
## , , C2
## 
##    B1 B2 B3
## A1  7  9 11
## A2  8 10 12
## 
## , , C3
## 
##    B1 B2 B3
## A1 13 15 17
## A2 14 16 18
## 
## , , C4
## 
##    B1 B2 B3
## A1 19 21 23
## A2 20 22 24

可以看到这里c(2,3,4)表示的3个维度分别为2,3,4个,即2行3列4面。

  • 2.2.3.3 访问数组中的元素

和矩阵类似,使用下标和方括号来选择。

z[1,3,4]
## [1] 23

这表示选择是维度1中的1(第一行),维度2中的3(第三列),维度3中的4(第4个矩阵) 可以某种程度上将数组看出几个矩阵的组合。

2.2.4 数据框(data)

  • 2.2.4.1 定义

数据框的不同列可以包含不同模式(数值型、字符型、逻辑型)数据,更类似于常见的数据集。

通过函数data.frame()创建:

mydata <- data.frame(col1,col2,col3,...)

col1,col2,col3,…:列向量,可以为任何类型的数据,每一列的名称由函数names指定。 但通常不同列(变量)的向量中的数据(观测值)个数相同,且每一列数据的模式必须相同

  • 2.2.4.2 创建数据框
patientID <- c(1,2,3,4)
age <- c(25,34,28,52)
diabetes <- c("Type1","Type2","Type1","Type1")
status <- c("Poor","Improved","Excellent","Poor")
patientdata <- data.frame(patientID,age,diabetes,status)
patientdata
##   patientID age diabetes    status
## 1         1  25    Type1      Poor
## 2         2  34    Type2  Improved
## 3         3  28    Type1 Excellent
## 4         4  52    Type1      Poor
  • 2.2.4.3 选取数据框中的元素

1)用方括号和下标来选取,[n]和[n1:n2]格式下标的数字表示第n1到n2变量(列)

patientdata[1:2]
##   patientID age
## 1         1  25
## 2         2  34
## 3         3  28
## 4         4  52
patientdata[4]
##      status
## 1      Poor
## 2  Improved
## 3 Excellent
## 4      Poor

而[n1,n2]则选取的依然是第n1行,n2列对应的元素

patientdata[3,4]
## [1] "Excellent"

2)直接利用函数制定特定变量名来获取

patientdata[c("age","status")]
##   age    status
## 1  25      Poor
## 2  34  Improved
## 3  28 Excellent
## 4  52      Poor

注意变量名是字符型数据,所以要加”“

3)利用$符号+变量名(不用双引号)

patientdata$status
## [1] "Poor"      "Improved"  "Excellent" "Poor"

with()函数

在每个变量名前都输入一次patientdata$比较繁琐,可以借助with()函数简化代码

以内置数据框mtcars为例:

mtcars
##                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
## Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
## Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
## Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
## Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
## Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
## Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
## Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
## Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
## Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
## Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
## Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
## Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
## Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
## Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
## Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
## Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
## Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
## AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
## Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
## Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
## Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
## Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
## Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
## Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
## Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
## Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
## Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
summary(mtcars$mpg)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   10.40   15.43   19.20   20.09   22.80   33.90
plot(mtcars$mpg,mtcars$disp)

图片

plot(mtcars$mpg,mtcars$wt)

图片

summary()获取描述性统计量,可以提供最小值、最大值、四分位数和数值型变量的均值,以及因子向量和逻辑型向量的频数统计等。结果输出中的1Q和Q3分别为残差第一四分位数(1Q)和第三分位数(Q3)。

利用with()函数可以简化为:

with(mtcars,{summary(mpg)plot(mpg,disp)plot(mpg,wt)})

图片

图片

{}中的命令都是针对mtcars执行,如果仅有一条命令,那么{}可省略。

函数with()的局限性在于赋值仅在此函数的括号里生效,例如:

with(mtcars,{stats <- summary(mpg)
stats})
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   10.40   15.43   19.20   20.09   22.80   33.90
stats
## Error in eval(expr, envir, enclos): 找不到对象'stats'

如果需要创建with()以外存在的对象,可使用特殊赋值符号 <<-替代原来的<- ,即可将对象保存到with()之外的全局环境中,例如:

with(mtcars,{stats <<- summary(mpg)
stats})
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   10.40   15.43   19.20   20.09   22.80   33.90
stats
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   10.40   15.43   19.20   20.09   22.80   33.90

2.2.5 因子(factor)

  • 2.2.5.1 定义

谈因子前首先要对变量进行分类,可以分为:

变量分类定义包括具体举例

名义变量(分类变量)

nominal variable

没有顺序之分的分类变量性别,省份,职业、分型等Diabetes(Type1、Type2)

顺序变量

ordinal variable

一种顺序关系而非数量关系班级,名次,病情等Status(poor、improved、excellent)

连续变量

continuous variable

可呈现为某个范围内的任意值,并同时表示了顺序和数量连续的数值,可以进行求和,平均值等运算age(15、21、33)

其中名义变量和顺序变量称为因子

  • 2.2.5.1.1 名义变量作为因子时

函数factor()以一个整数向量的形式存储类别值,整数的取值范围是1…k。同时,一个由字符串(原始值)组成的内部向量将映射到这些整数上。

举例:

diabetes <- c("Type1","Type2","Type1","Type1")
diabetes1 <- factor(diabetes)
str(diabetes)
##  chr [1:4] "Type1" "Type2" "Type1" "Type1"
str(diabetes1)
##  Factor w/ 2 levels "Type1","Type2": 1 2 1 1

可以看到用factor()将向量存储为(1,2,1,1),并在内部将其关联为1=Type1,2=Type2.

  • 2.2.5.1.2 顺序变量作为因子时

表示顺序变量时,要指定ordered=TRUE

status<- c("poor","improved","excellent","poor")
status1 <- factor(status,ordered = TRUE)
str(status)
##  chr [1:4] "poor" "improved" "excellent" "poor"
str(status1)
##  Ord.factor w/ 3 levels "excellent"<"improved"<..: 3 2 1 3

对于字符型向量,因子的水平(level)默认依字母顺序创建,但很少情况是理想的,可以用levels选项覆盖默认排序,重新排序:

status<- c("poor","improved","excellent","poor")
status2 <- factor(status,ordered = TRUE,levels = c("poor","improved","excellent"))
str(status)
##  chr [1:4] "poor" "improved" "excellent" "poor"
str(status2)
##  Ord.factor w/ 3 levels "poor"<"improved"<..: 1 2 3 1

这样排序从原来的3213变成了1231。

数值型变量可以用参数levels和labels来编码因子 例如,男性被编码为1,女性被编码为2:

sex <- c(1,2,2,1)
sex<- factor(sex,levels = c(1,2),labels = c("Male","Female"))
sex
## [1] Male   Female Female Male  
## Levels: Male Female

归根结底,因子和非因子到底什么区别?我们用一张图就可以直观感受 plot函数的数据集是向量的作图输出散点图:

mtcars$cyl
##  [1] 6 6 4 6 8 6 8 4 4 6 6 8 8 8 8 8 8 4 4 4 4 8 8 8 8 4 4 4 8 6 8 4
plot(mtcars$cyl)

图片

plot函数的数据集是因子的作图输出条形图:

mtcars$cyl
##  [1] 6 6 4 6 8 6 8 4 4 6 6 8 8 8 8 8 8 4 4 4 4 8 8 8 8 4 4 4 8 6 8 4
mtcars1 <- factor(mtcars$cyl)
plot(mtcars1)

图片

2.2.6 列表(list)

  • 2.2.6.1 定义

一些对象(或成分)的有序集合。一个列表中可能包含若干对象(可能无关的)如向量,矩阵,数据框甚至其他列表。

用函数list()创建,也可以对列表中的对象命名:

mylist <- list(object1,object2,...)
mylist <- list(name1=object1,name2=object2,...)
  • 2.2.6.2 创建一个列表
g <- "My Frist list"
h <- c(25,23,11,13)
j <- matrix(1:10,nrow = 5)
k <- c("one","two","three")
mylist <- list(title=g,ages=h,j,k)
mylist
## $title
## [1] "My Frist list"
## 
## $ages
## [1] 25 23 11 13
## 
## [[3]]
##      [,1] [,2]
## [1,]    1    6
## [2,]    2    7
## [3,]    3    8
## [4,]    4    9
## [5,]    5   10
## 
## [[4]]
## [1] "one"   "two"   "three"

这个列表中包含了字符型、数值型向量,矩阵。

  • 2.2.6.3 选取列表中的元素

一般用[[]],双重方括号加数字或名称来访问

mylist[[2]]
## [1] 25 23 11 13
mylist[["title"]]
## [1] "My Frist list"
mylist["title"]
## $title
## [1] "My Frist list"

2.2.7 tibble数据框

  • 2.2.7.1 定义

与标准数据框相比,tibble数据框的打印格式更加紧凑。且变量标签描述了每一列的数据类型。

安装tibble包:

install.packages("tibble")

用函数tibble()或as_tibble()创建

举例来看:

mtcars
##                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
## Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
## Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
## Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
## Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
## Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
## Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
## Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
## Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
## Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
## Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
## Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
## Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
## Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
## Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
## Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
## Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
## Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
## AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
## Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
## Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
## Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
## Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
## Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
## Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
## Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
## Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
## Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
library(tibble)
mtcars2 <- tibble(mtcars)
mtcars2
## # A tibble: 32 × 11
##      mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
##    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
##  1  21       6  160    110  3.9   2.62  16.5     0     1     4     4
##  2  21       6  160    110  3.9   2.88  17.0     0     1     4     4
##  3  22.8     4  108     93  3.85  2.32  18.6     1     1     4     1
##  4  21.4     6  258    110  3.08  3.22  19.4     1     0     3     1
##  5  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2
##  6  18.1     6  225    105  2.76  3.46  20.2     1     0     3     1
##  7  14.3     8  360    245  3.21  3.57  15.8     0     0     3     4
##  8  24.4     4  147.    62  3.69  3.19  20       1     0     4     2
##  9  22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2
## 10  19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4
## # ℹ 22 more rows

这里变量名下的<>中的内容代表变量类型:

缩写变量类型
int整数型变量
dbl双精度浮点数型变量,或称实数
chr字符向量,或称字符串
dttm日期时间(日期+ 时间)型变量
date日期型变量
lgl逻辑型变量,是一个仅包括TRUE 和FALSE 的向量
fctr因子,R 用其来表示具有固定数目的值的分类变量

可以看到tibble数据框有几个特点:

1)不支持行名,可以用rownames_to_column()将数据框的行名转变为变量。

library(tibble)
mtcars2 <- tibble(mtcars)
mtcars2
## # A tibble: 32 × 11
##      mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
##    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
##  1  21       6  160    110  3.9   2.62  16.5     0     1     4     4
##  2  21       6  160    110  3.9   2.88  17.0     0     1     4     4
##  3  22.8     4  108     93  3.85  2.32  18.6     1     1     4     1
##  4  21.4     6  258    110  3.08  3.22  19.4     1     0     3     1
##  5  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2
##  6  18.1     6  225    105  2.76  3.46  20.2     1     0     3     1
##  7  14.3     8  360    245  3.21  3.57  15.8     0     0     3     4
##  8  24.4     4  147.    62  3.69  3.19  20       1     0     4     2
##  9  22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2
## 10  19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4
## # ℹ 22 more rows
rownames_to_column(mtcars2)
## # A tibble: 32 × 12
##    rowname   mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
##    <chr>   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
##  1 1        21       6  160    110  3.9   2.62  16.5     0     1     4     4
##  2 2        21       6  160    110  3.9   2.88  17.0     0     1     4     4
##  3 3        22.8     4  108     93  3.85  2.32  18.6     1     1     4     1
##  4 4        21.4     6  258    110  3.08  3.22  19.4     1     0     3     1
##  5 5        18.7     8  360    175  3.15  3.44  17.0     0     0     3     2
##  6 6        18.1     6  225    105  2.76  3.46  20.2     1     0     3     1
##  7 7        14.3     8  360    245  3.21  3.57  15.8     0     0     3     4
##  8 8        24.4     4  147.    62  3.69  3.19  20       1     0     4     2
##  9 9        22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2
## 10 10       19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4
## # ℹ 22 more rows

2)不会更改变量的名称。例如导入的数据集中有一变量名为last dance,在R中变量名中不得有空格,因此普通数据集函数会将其改为last.dance,而tibble数据框会保留这样的命名,并用反引号(last dance)使变量名在语法上正确。

3)tibble数据框取子集总是返回一个tibble数据框。

例如,普通的数据框取子集时一般返回向量,除非加上drop=FALSE,才会以列表的形式返回:

mtcars[,"mpg"]
##  [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4
## [16] 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7
## [31] 15.0 21.4
mtcars[,"mpg",drop=FALSE]
##                      mpg
## Mazda RX4           21.0
## Mazda RX4 Wag       21.0
## Datsun 710          22.8
## Hornet 4 Drive      21.4
## Hornet Sportabout   18.7
## Valiant             18.1
## Duster 360          14.3
## Merc 240D           24.4
## Merc 230            22.8
## Merc 280            19.2
## Merc 280C           17.8
## Merc 450SE          16.4
## Merc 450SL          17.3
## Merc 450SLC         15.2
## Cadillac Fleetwood  10.4
## Lincoln Continental 10.4
## Chrysler Imperial   14.7
## Fiat 128            32.4
## Honda Civic         30.4
## Toyota Corolla      33.9
## Toyota Corona       21.5
## Dodge Challenger    15.5
## AMC Javelin         15.2
## Camaro Z28          13.3
## Pontiac Firebird    19.2
## Fiat X1-9           27.3
## Porsche 914-2       26.0
## Lotus Europa        30.4
## Ford Pantera L      15.8
## Ferrari Dino        19.7
## Maserati Bora       15.0
## Volvo 142E          21.4

但在tibble数据框中则可以直接呈现单列的tibble数据框:

mtcars2[,"mpg"]
## # A tibble: 32 × 1
##      mpg
##    <dbl>
##  1  21  
##  2  21  
##  3  22.8
##  4  21.4
##  5  18.7
##  6  18.1
##  7  14.3
##  8  24.4
##  9  22.8
## 10  19.2
## # ℹ 22 more rows

4)不改变输入的类型(例如,不能将字符串转换为因子)。在R4.0.0以前的版本中,函数read.table(),as.data.frame()会默认将字符型数据转换为因子。AsFactors = FALSE可以取消该默认设置。

2.3 数据输入

这里介绍2种常用的,分别是从带分隔符的文本文件导入和从excel导入。

文本文件包括:纯文本文件,Markdown文件,HTML文件,XML文件,JSON文件,CSV文件,日志文件,配置文件,脚本文件。

2.3.1 从带分隔符的文本文件导入数据

2.3.1.1 定义

用函数read.table()来导入,此函数读入一个表格格式的文件并将其保存为一个数据框。语法:

mydataframe <- read.table(file,options)

其中,file是一个带分隔符的ASCII文本文件,options是控制如何处理数据的选项。常见选项有:

图片

以studentgrades.csv的文本文件举例:

grades <- read.table("studentgrades.csv",header = TRUE,row.names = "studentID",sep = ",")
## Warning in read.table("studentgrades.csv", header = TRUE, row.names =
## "studentID", : incomplete final line found by readTableHeader on
## 'studentgrades.csv'
grades
##    First           Last Math Science Social
## 11   Bob          Smith   90      80     67
## 12  Jane          Weary   75      NA     80
## 10   Dan "Thornton,III"   65      75     70
## 40  Mary      "O'Leary"   90      95     92

studentID现在是行名,不再有标签,也失去了前置0。

str(grades)
## 'data.frame':    4 obs. of  5 variables:
##  $ First  : chr  "Bob" "Jane" "Dan" "Mary"
##  $ Last   : chr  "Smith" "Weary" "\"Thornton,III\"" "\"O'Leary\""
##  $ Math   : int  90 75 65 90
##  $ Science: int  80 NA 75 95
##  $ Social : int  67 80 70 92

注:对于“Thornton,III”要用双引号包围住,否则R会将其读为2个值而出错。

我们重新导入上面的数据,并同时为每个变量指定一个类:

grades <- read.table("studentgrades.csv",header = TRUE,row.names = "studentID",sep = ",",colClasses = c("character","character","character","numeric","numeric","numeric"))
## Warning in read.table("studentgrades.csv", header = TRUE, row.names =
## "studentID", : incomplete final line found by readTableHeader on
## 'studentgrades.csv'
grades
##     First           Last Math Science Social
## 011   Bob          Smith   90      80     67
## 012  Jane          Weary   75      NA     80
## 010   Dan "Thornton,III"   65      75     70
## 040  Mary      "O'Leary"   90      95     92
str(grades)
## 'data.frame':    4 obs. of  5 variables:
##  $ First  : chr  "Bob" "Jane" "Dan" "Mary"
##  $ Last   : chr  "Smith" "Weary" "\"Thornton,III\"" "\"O'Leary\""
##  $ Math   : num  90 75 65 90
##  $ Science: num  80 NA 75 95
##  $ Social : num  67 80 70 92

可以看到行名保留了前缀0

其他读取方法:

1)read.csv():默认header=T,sep=“,”

2)read.delim():默认默认header=T,sep=“

3)readr包:其中主要函数是read.delim(),辅助函数为read.csv()和read.tsv(),其优点是速度快,且可以推测每一列的数据类型。

2.3.2 导入Excel数据

2.3.2.1 方法

1)将excel数据导出为一个csv文件后,使用前面方法进行导入

2)用readxl包直接导入excel工作表:readxl可以用来读取.xls和.xlsx版本的excel文件

语法:

read_table(file,n)

file是excel工作簿的所在路径,n则为导入的工作表序号,工作表的第一行为变量名。

例如:

install.packages("readxl")
library(readxl)
## Warning: 程辑包'readxl'是用R版本4.3.2 来建造的
a <- "./test.xlsx"
mytest <- read_excel(a,2)
mytest
## # A tibble: 8 × 2
##   `动物\r\n编号` `体重(g)`
##   <chr>                <dbl>
## 1 A71                   18.7
## 2 A74                   18.8
## 3 A79                   18  
## 4 A80                   18.5
## 5 A81                   18.7
## 6 A82                   18.3
## 7 A83                   20  
## 8 A84                   17.5

read_excel()可以指定某个单元区域(range=“mysheet!B2:G14”),例如:

a <- "./test.xlsx"
mytest1 <- read_excel(a,2,range ="A3:B8" )
mytest1
## # A tibble: 5 × 2
##   A74   `18.8`
##   <chr>  <dbl>
## 1 A79     18  
## 2 A80     18.5
## 3 A81     18.7
## 4 A82     18.3
## 5 A83     20

另外,xlsx,XLConnect,openxlsx包也可以处理excel文件。

往期回顾

R语言基础学习手册

下载、安装

相关文章:

  • langGraph多Agent
  • PH热榜 | 2025-06-02
  • Spring Boot中保存前端上传的图片
  • React 18 生命周期详解与并发模式下的变化
  • openai-java
  • 企业级开发中的 maven-mvnd 应用实践
  • 免费的硬盘工具
  • 电子电气架构 --- 后轮转向的一点事情
  • BUUCTF[ACTF2020 新生赛]Include 1题解
  • 《QDebug 2025年5月》
  • 2024年第十五届蓝桥杯Scratch10月stema选拔赛真题——数字卡片排序
  • [蓝桥杯]交换次数
  • [蓝桥杯]蚂蚁感冒
  • Spring Boot 3.X 下Redis缓存的尝试(一):初步尝试
  • BayesFlow:基于神经网络的摊销贝叶斯推断框架
  • php 各版本下载
  • NTP库详解
  • JavaScript性能优化:实战技巧提升10倍速度
  • 【笔记】如何卸载 MSYS2 中不同工具链的 numpy 包
  • TDengine 的 AI 应用实战——电力需求预测
  • 行业信息网站有哪些/销售找客户的方法
  • 网站升级建设方案/杭州网站关键词排名优化
  • wordpress仿天涯主题/杭州seo搜索引擎优化
  • 义乌做网站要多少钱/免费的外链网站
  • 做网站页面该建多大的画布/爱站工具包官网下载
  • 交互网站开发/内江seo