R语言基础| 创建数据集

article/2025/6/28 20:50:31

在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语言基础学习手册

下载、安装


http://www.hkcw.cn/article/RVysPRGRtM.shtml

相关文章

UE特效Niagara性能分析

开启Niagara调试器 开启显示概览 界面显示 &#x1f7e9; 上方绿色面板&#xff1a;Niagara DebugHud 这是 HUD&#xff08;调试视图&#xff09; 模式下的性能统计显示&#xff0c;内容如下&#xff1a; 项目含义SystemFilter: ShockWave_01当前选中的 Niagara 粒子系统名称…

MySQL——事务

目录 问题 什么是事务 为什么会有事务 事务版本支持 事务提交方式 事务常见操作 事务隔离级别 查看与设置隔离性 事务四种隔离级别 读未提交 读提交 不可重复读 串行化 一致性 理解隔离性 4个隐藏字段 undo日志 MVCC Read View RR 与 RC 本质区别 问题…

Vue-3-前端框架Vue基础入门之VSCode开发环境配置和Tomcat部署Vue项目

文章目录 1 安装配置VSCode1.1 安装中文语言插件1.2 主题颜色1.3 禁用自动更新1.4 开启代码提示设置1.5 安装open in browser插件2 安装配置nodejs2.1 配置环境变量2.2 npm与maven的区别2.3 使用npm避坑3 创建Vue项目3.1 两种创建方式3.2 package.json3.3 安装新的依赖3.4 运行…

Webpack依赖

Webpack到底怎么对我们的项目进行打包捏&#xff1f; 在webpack处理应用程序时&#xff0c;会根据命令或者配置文件找到入口文件 从入口开始&#xff0c;会生成一个依赖关系图&#xff0c;这个依赖关系图会包含应用程序中所需的所有模块&#xff08;.js、css文件、图片、字体…

关于找不到符号,符号变量log的问题的解决方案

创建时间&#xff1a;06月02日 1、问题描述 最近在学习鱼皮的AI超级智能体项目过程中&#xff0c;遇到如下错误&#xff1a; java: 找不到符号符号: 变量 log位置: 类 com.liucc.aiagent.app.LoveApp2、排查思路 网上的常见解决思路主要是检查lombok插件是否安装、Enable…

mysql离线安装教程

1.下载地址: https://downloads.mysql.com/archives/community/ 2.上传安装包到系统目录,并解压 tar -xvf mysql-8.0.34-1.el7.x86_64.rpm-bundle.tar3.检查系统中是否存在mariadb的rpm包 rpm -qa|grep mariadb存在则删除 rpm -e xxx4.解压完后执行如下命令安装 sudo rpm -iv…

【git-首次初始化本地项目、关联远程仓库】

使用场景&#xff1a; windows系统本地首次创建的项目本地已存在但未关联为git项目 操作步骤 创建远程仓库 在gitee或github创建新仓库即可本地安装git 搜索“git安装教程”&#xff0c;按照步骤安装即可打开git中端&#xff0c;进入项目文件夹 cd E:\xxx备注&#xff1a;这…

AI驱动的文本转Mermaid图表工具Smart Mermaid

简介 什么是 Smart Mermaid &#xff1f; Smart Mermaid 是一款基于 AI 技术的 Web 应用程序&#xff0c;能够将文本内容智能转换为 Mermaid 格式的代码&#xff0c;并将其渲染成可视化图表。用户只需输入文本描述&#xff0c;AI 即可生成相应的图表&#xff0c;支持多种图表类…

调用蓝耘API打造AI 智能客服系统实践教程

声明&#xff1a;文章是实验教程&#xff0c;不是广告 1.前言 在用户与人工客服的沟通中&#xff0c;等待时间长、需求难满足等问题频发&#xff0c;企业面临用户流失风险&#xff0c;用户渴望快速精准的答案&#xff0c;企业需要“开源节流”、“降本增效”。对此&#xff0c…

VM图像处理之图像二值化

什么是灰度&#xff1f; 灰度&#xff08;Grayscale&#xff09;是指将彩色图像转换为仅包含亮度信息&#xff08;黑白过渡&#xff09;的单通道图像的过程或结果。灰度图像中每个像素的数值代表该点的明暗程度&#xff0c;而不包含颜色信息。 亮度代替颜色&#xff1a; 灰度…

通信革新与网络安全探索与创新:开启未来之门

在科技飞速发展的当下&#xff0c;各领域的前沿探索正不断刷新着人类的认知与能力边界。脑机接口领域取得重大突破&#xff0c;上海阶梯医疗科技有限公司成功完成国内首例侵入式脑机接口系统前瞻性临床试验&#xff0c;受试者通过植入大脑的设备实现用意念玩游戏&#xff0c;为…

sigmastar实现SD卡升级

参考文章:http://wx.comake.online/doc/DD22dk2f3zx-SSD21X-SSD22X/customer/development/software/Px/zh/sys/P3/usb%20&%20sd%20update.html#21-sd 1、构建SD卡升级包 在project下make image完成后使用make_sd_upgrade_sigmastar.sh脚本打包SD卡升级包。 ./make_sd_up…

hook组件-useEffect、useRef

hook组件-useEffect、useRef useEffect 用法及执行机制 WillMount -> render -> DidMount ShouldUpdate -> WillUpdate -> render -> DidUpdate WillUnmount(只有这个安全) WillReceiveProps useEffect(callback) 默认所有依赖都更新useEffect(callback, [])&am…

Spring 5 响应式编程:构建高性能全栈应用的关键

本文已收录在Github&#xff0c;关注我&#xff0c;紧跟本系列专栏文章&#xff0c;咱们下篇再续&#xff01; &#x1f680; 魔都架构师 | 全网30W技术追随者&#x1f527; 大厂分布式系统/数据中台实战专家&#x1f3c6; 主导交易系统百万级流量调优 & 车联网平台架构&a…

用“红烧鱼”类比说明卷积神经网络CNN的概念

我们用一个生活中的例子——「厨房做红烧鱼」 的场景&#xff0c;来类比卷积神经网络中多层卷积核的工作过程。你会发现&#xff0c;卷积层就像厨房里分工明确的厨师团队&#xff0c;逐步处理食材&#xff0c;最终完成一道复杂的菜品。 &#x1f41f; 生活案例&#xff1a;厨房…

如何捍卫德国利益 默茨访美很“烧脑”

根据德国政府日前的声明,德国总理默茨将于当地时间5日访美,与美国总统特朗普举行首次单独会晤。△路透社报道截图德美关系一直是西方世界中最为重要的双边关系之一。然而,自美国总统特朗普提出“美国优先”理念以来,这对跨大西洋盟友间的裂痕不断加深。此前,白宫椭圆形办公…

Google机器学习实践指南(TensorFlow六大优化器)

&#x1f525; Google机器学习实践指南&#xff08;TensorFlow六大优化器&#xff09; Google机器学习实战(12)-20分钟掌握TensorFlow优化器 一、优化器核心作用 ▲ 训练本质&#xff1a; 迭代求解使损失函数最小化的模型参数&#xff0c;关键要素&#xff1a; 特征工程&…

第15讲、Odoo 18 中 自动任务(ir.cron) 的实现原理与应用

目录 引言ir.cron 实现原理运行机制应用场景使用案例 案例一&#xff1a;定期发送邮件通知案例二&#xff1a;自动清理过期数据案例三&#xff1a;订单状态自动更新案例四&#xff1a;系统健康检查 最佳实践与注意事项总结 引言 在企业级应用中&#xff0c;自动化是提高效率…

消费信心回升5.3%!亚马逊泳装搜索量暴涨120%的启示

近期&#xff0c;美国经济呈现出令人鼓舞的复苏迹象。根据密歇根大学发布的最新消费者信心指数&#xff08;Consumer Sentiment Index&#xff09;&#xff0c;2024年5月&#xff0c;该指数环比增长5.3%&#xff0c;达到69.1&#xff0c;创下自2023年中以来的最高水平。与此同时…

绿发会回应涉哈佛女孩蒋雨融争议 特权质疑风波

绿发会回应涉哈佛女孩蒋雨融争议 特权质疑风波!2025年5月29日,哈佛大学毕业典礼上,中国籍学生蒋雨融作为毕业生代表发表演讲。她穿着中国传统服饰,通过讲述翻译洗衣机中文标识的趣事,呼吁多元与包容,并间接批评了特朗普政府的“禁招令”。这场本应充满励志色彩的演讲却因…