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

下载、安装

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/83374.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nssctf第二题[SWPUCTF 2021 新生赛]简简单单的逻辑

这是题目&#xff0c;下载后得到一个python文件,打开 解读代码&#xff1a; for i in range(len(list)):key (list[i]>>4)((list[i] & 0xf)<<4)result str(hex(ord(flag[i])^key))[2:].zfill(2)list[i]>>4&#xff1a;从列表中取数字同时高4位向右位…

mysql(十五)

目录 子查询 1.准备工作 2--创建表格 3--插入数据 2.where 子查询单列单个数据 格式 查询 3.where 子查询单列多个数据(in) 格式 查询 使用子查询 4.from 多行多数据 格式 查询 子查询 将select的查询的返回结果 当成另外一个selet语句的内容去使用。 子查询放在()里面 注意…

【HarmonyOS 5】鸿蒙Taro跨端框架

‌Taro跨端框架‌ 支持React语法开发鸿蒙应用&#xff0c;架构分为三层&#xff1a; ArkVM层运行业务代码和React核心TaroElement树处理节点创建和属性绑定TaroRenderNode虚拟节点树与上屏节点一一对应 import { Component } from tarojs/taro export default class MyCompon…

华为OD机试真题——会议接待 /代表团坐车(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 A卷 200分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 本文收录于专栏:《2025华为OD真题目录+全流程解析/备考攻略/经验分享》 华为OD机试真题《会议…

C语言---动态内存管理、柔性数组

一、malloc和free 1、变长数组 变长数组是指数组的大小可以通过变量来指定。 在c99以及之后的标准中&#xff1a; #include<stdio.h> int main() { int n0; scanf("%d",&n); } 2、malloc和free 这个函数向内存申请一块连续可用的空间&#xff0c;并返…

WEBSTORM前端 —— 第3章:移动 Web —— 第4节:移动适配-VM

目录 一、适配方案 二、VM布局 ​编辑 三、vh布局 四、案例—酷我音乐 一、适配方案 二、VM布局 三、vh布局 四、案例—酷我音乐

Dynamics 365 Business Central AI Sales Order Agent Copilot

#AI Copilot# #D365 BC 26 Wave# 最近很多客户都陆续升级到 Dynamics 365 Business Central 26 wave, Microsoft 提供一个基于Copilot 的Sales Order Agent&#xff0c;此文将此功能做个介绍. Explorer: 可以看到26版本上面增加了这样一个新图标。 Configuration: 配置过程…

【harbor】--配置https

使用自建的 CA 证书来自签署和启用 HTTPS 通信。 &#xff08;1&#xff09;生成 CA认证 使用 OpenSSL 生成一个 2048位的私钥这是 自建 CA&#xff08;证书颁发机构&#xff09; 的私钥&#xff0c;后续会用它来签发证书。 # 1创建CA认证 cd 到harbor [rootlocalhost harbo…

Selenium基础操作方法详解

Selenium基础操作方法详解&#xff1a;从零开始编写自动化脚本&#xff08;附完整代码&#xff09; 引言 Selenium是自动化测试和网页操作的利器&#xff0c;但对于新手来说&#xff0c;掌握基础操作是成功的第一步。本文将手把手教你使用Selenium完成浏览器初始化、元素定位、…

python同步mysql数据

python写了一个简单的mysql数据同步脚本,只作为学习练习,大佬勿喷 # -*- coding: utf-8 -*- """ Time:2025/5/29 14:38 Auth:HEhandsome """ import pymysql from pymysql import Connectclass Mysql:def __init__(self):#源数据库self.sou_hos…

手撕Java+硅基流动实现MCP服务器教程

手撕Java硅基流动实现MCP服务器教程 一、MCP协议核心概念 MCP是什么 MCP 是 Anthropic (Claude) 主导发布的一个开放的、通用的、有共识的协议标准。 ● MCP 是一个标准协议&#xff0c;就像给 AI 大模型装了一个 “万能接口”&#xff0c;让 AI 模型能够与不同的数据源和工…

.net consul服务注册与发现

.NET中Consul服务注册与发现的技术实践 在微服务架构中&#xff0c;服务的注册与发现是至关重要的环节&#xff0c;它能帮助各个服务之间实现高效的通信和协作。Consul作为一款功能强大的工具&#xff0c;为我们提供了优秀的服务注册与发现解决方案。今天&#xff0c;我们就来…

大数据量下的数据修复与回写Spark on Hive 的大数据量主键冲突排查:COUNT(DISTINCT) 的陷阱

背景与问题概述 这一周&#xff08;2025-05-26-2026-05-30&#xff09;我在搞数据拟合修复优化的任务&#xff0c;有大量的数据需要进行数据处理及回写&#xff0c;大概一个表一天一分区有五六千万数据&#xff0c;大约一百多列的字段。 具体是这样的我先取档案&#x…

基于 AUTOSAR 的域控产品软件开发:从 CP 到 AP 的跨越

基于 AUTOSAR 的域控产品软件开发&#xff1a;从 CP 到 AP 的跨越 一、AUTOSAR AP 架构解析&#xff1a;面向智能汽车的自适应框架 &#xff08;一&#xff09;引言 随着汽车智能化向 L3 演进&#xff0c;传统 AUTOSAR CP&#xff08;经典平台&#xff09;在实时性、动态性和…

Nacos 配置管理案例:nacos-spring-cloud-config-example详解

一、结构说明&#xff1a;基于Spring Cloud Alibaba的微服务示例 nacos-spring-cloud-config-example : 服务提供者 二、技术栈&#xff1a;Spring BootSpring CloudSpring Cloud Alibaba Nacos Actuator&#xff08;可选&#xff1a;监控&#xff09; 三、使用环境 安装…

BUUCTF[ACTF2020 新生赛]Include 1题解

BUUCTF[ACTF2020 新生赛]Include 1题解 题目分析&#xff1a;知识准备&#xff1a;php://filter 过滤器参数说明常用过滤器功能对照表 开始解题&#xff1a;原理解析构造payload 总结 题目分析&#xff1a; 生成靶机&#xff0c;打开网址&#xff0c;查看源码&#xff0c;抓包…

vscode + cmake + ninja+ gcc 搭建MCU开发环境

vscode cmake ninja gcc 搭建MCU开发环境 文章目录 vscode cmake ninja gcc 搭建MCU开发环境1. 前言2. 工具安装及介绍2.1 gcc2.1.1 gcc 介绍2.1.2 gcc 下载及安装 2.2 ninja2.2.1 ninja 介绍2.2 ninja 安装 2.3 cmake2.3.1 cmake 介绍2.3.2 cmake 安装 2.4 VScode 3. 上手…

九(1). 引用作为函数参数的使用

引用作为参数使用 在 C 中&#xff0c;引用作为函数参数是一种高效且灵活的参数传递方式&#xff0c;它避免了拷贝开销&#xff0c;同时允许函数直接操作原始数据。 以下是关于引用作为参数的详细使用指南和最佳实践&#xff1a; 1. 引用作为参数的基本用法 (1) 普通引用&…

Linux多路TTS混音播放:让多个语音同时清晰可听

Linux多路TTS混音播放:让多个语音同时清晰可听 为什么需要多路混音播放?技术原理概述第一步:配置ALSA dmix混音插件为什么需要dmix?具体配置步骤第二步:生成TTS语音文件为什么需要格式转换?Python生成脚本第三步:实现多路同时播放播放器设计原理Python实现代码多路同时播…

Spring AI 1.0 GA 深度解析:构建企业级AI应用的全栈实践指南

目录 Spring AI 1.0 核心架构解析统一接口与多模型支持检索增强生成(RAG)全流程实战对话记忆与工具调用进阶模型评估与可观测性体系企业级应用案例与最佳实践未来演进与技术展望1. Spring AI 1.0 核心架构解析 1.1 技术架构演进 #mermaid-svg-ymTZMAaxOwd4OAMu {font-family…