2 数据结构及数据的输入输出

数据结构

R语言的基础数据机构包括标量、向量、矩阵、数据框、因子、列表等,下面将逐一介绍

向量

向量是用于存储数值型、字符型或逻辑型数据的一维数组。向量一般由函数c()生成,也可由其他函数生成。以下是常用的向量生成方法。

a <- c(1,2,-5,1,3,-10)
a ## 这行代码用于显示a
  1. 1
  2. 2
  3. -5
  4. 1
  5. 3
  6. -10
b <- c('Feb', 'July', "June", 'Oct') #单引号与双引号效果一样
c <- c(TRUE, FALSE, T, F) ## TRUE与T等效,同理,FALSE与F等效
d <- seq(from=1, to=10, by=2) 
d
  1. 1
  2. 3
  3. 5
  4. 7
  5. 9
##seq() 常用来生成向量,如果想了解更多 seq()函数的细节,可以输入如下代码:
?seq
e <- seq(from=1, to=10, length.out=10)
e
length(e) ## 输出 向量e的长度
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10

10

矩阵

矩阵是一个二维数组,只是每个元素都拥有相同的模式(数值型、字符型或逻辑型)。可通过函数matrix创建矩阵。

y1 <- matrix(1:20, nrow=5, ncol=4)
y1
A matrix: 5 × 4 of type int
1 61116
2 71217
3 81318
4 91419
5101520
y2 <- matrix(1:20, nrow=5, ncol=4, byrow=T)
y2
A matrix: 5 × 4 of type int
1 2 3 4
5 6 7 8
9101112
13141516
17181920
y2[1,]
  1. 1
  2. 2
  3. 3
  4. 4
y2[2,]
  1. 5
  2. 6
  3. 7
  4. 8

数据框

数据框是进行数据分析时候,最常使用的一个数据格式。数据框的每一行表示一个样本,每一列表示一个特征。如下是一个典型的数据框。

data(mtcars)
head(mtcars)
A data.frame: 6 × 11
mpgcyldisphpdratwtqsecvsamgearcarb
<dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl>
Mazda RX421.061601103.902.62016.460144
Mazda RX4 Wag21.061601103.902.87517.020144
Datsun 71022.84108 933.852.32018.611141
Hornet 4 Drive21.462581103.083.21519.441031
Hornet Sportabout18.783601753.153.44017.020032
Valiant18.162251052.763.46020.221031

数据框的创建很简单,如下是一种简单的数据框创建方式:

id <- 1:5
status <- c("poor", "improved", "excellent", "poor", 'improved')
gender <- c('female', 'male', 'female', 'male', 'male')
df <- data.frame(id, status, gender)
df
A data.frame: 5 × 3
idstatusgender
<int><chr><chr>
1poor female
2improved male
3excellentfemale
4poor male
5improved male

选取数据框的某一类,可通过数据框名称$特征值名称的方式

df$id
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5

对数据框进行初步分析,可采用如下方式:

summary(df)
       id       status             gender         
 Min.   :1   Length:5           Length:5          
 1st Qu.:2   Class :character   Class :character  
 Median :3   Mode  :character   Mode  :character  
 Mean   :3                                        
 3rd Qu.:4                                        
 Max.   :5                                        

为数据框df增加一列,可采用如下操作:

a <- c(3,4,1,2,3)
df$b <- a
df$c <- a > 3
head(df)
A data.frame: 5 × 5
idstatusgenderbc
<int><chr><chr><dbl><lgl>
11poor female3FALSE
22improved male 4 TRUE
33excellentfemale1FALSE
44poor male 2FALSE
55improved male 3FALSE

当然,更多时候,数据框不是通过输入获得,而是通过读取硬盘文件获得。关于读取文件,我们会在后面讲解。

因子

类别(名义型)变量和有序类别(有序型)变量在R中称为因子(factor)。因子在R中非常重要,因为它决定了数据的分析方式以及如何进行视觉呈现。函数factor()以一个整数向量的形式存储类别值,整数的取值范围是[1… k ](其中k 是名义型变量中唯一值的个数),同时一个由字符串(原始值)组成的内部向量将映射到这些整数上。

因子分为无序因子和有序因子两类:

## 无序因子
type <- c('a', 'b', 'a', 'c', 'b') #字符串向量
type_f <- factor(type) #将向量type转换为无序因子 
# type_f <- factor(type)将此向量存储为(1, 2, 1, 3, 1)
# 并在内部将其关联为 1=a,2=b,3=c(具体赋值根据字母顺序而定)
paste("type的类别是",class(type))

‘type的类别是 character’

  1. 'a'
  2. 'b'
  3. 'a'
  4. 'c'
  5. 'b'
paste("type_f的类别是",class(type_f))
str(type_f)

‘type_f的类别是 factor’

 Factor w/ 3 levels "a","b","c": 1 2 1 3 2
## 有序因子

satisfaction <- c("dissatisfied", "satisfied", "neutral", "satisfied", "dissatisfied")
satisfaction_f <- factor(satisfaction, order=T,
                        levels = c("dissatisfied", "neutral", "satisfied" ))
str(satisfaction_f)
 Ord.factor w/ 3 levels "dissatisfied"<..: 1 3 2 3 1

列表

列表(list)是一些对象的有序集合。列表允许你整合若干(可能无关的)对象到单个对象名下。例如,某个
列表中可能是若干向量、矩阵、数据框,甚至其他列表的组合。可以使用函数list()创建列表。

a <- "abcdefsds"
b <- 1:10
c <- matrix(1:20, nrow=2)
a_list <- list(a_string=a, a_vector=b, a_matrix=c)
a_list
$a_string
'abcdefsds'
$a_vector
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
$a_matrix
A matrix: 2 × 10 of type int
1357 91113151719
2468101214161820
str(a_list$a_string)
str(a_list$a_matrix)
 chr "abcdefsds"
 int [1:2, 1:10] 1 2 3 4 5 6 7 8 9 10 ...

数据的输入输出

一般情况下,我们较少从键盘上输入数据,更多的是从硬盘的文件中导入数据。经常使用的数据格式包括:csv,txt,xls,dta格式等。

df1 <- read.table("data1.csv", header=T, sep=",") 
## header 用于表征每列是否有名称,sep用于表征数据与数据之间的分隔符,csv格式的分隔符是","
## 如果读取文件的路径不是R默认的路径,应该写入绝对路径:
## df1 <- read.table("D:/datafile/data1.csv", header=T, sep=",")
head(df1)
A data.frame: 6 × 12
Xmpgcyldisphpdratwtqsecvsamgearcarb
<chr><dbl><int><dbl><int><dbl><dbl><dbl><int><int><int><int>
1Mazda RX4 21.061601103.902.62016.460144
2Mazda RX4 Wag 21.061601103.902.87517.020144
3Datsun 710 22.84108 933.852.32018.611141
4Hornet 4 Drive 21.462581103.083.21519.441031
5Hornet Sportabout18.783601753.153.44017.020032
6Valiant 18.162251052.763.46020.221031
##csv格式是最常用的保存数据的格式,excel中可以保存为csv格式,如果是csv格式,可以用更简单的函数导入数据
##write.csv中将分隔符设置为","
df2 <- read.csv("data1.csv", header=T)
head(df2)
A data.frame: 6 × 12
Xmpgcyldisphpdratwtqsecvsamgearcarb
<chr><dbl><int><dbl><int><dbl><dbl><dbl><int><int><int><int>
1Mazda RX4 21.061601103.902.62016.460144
2Mazda RX4 Wag 21.061601103.902.87517.020144
3Datsun 710 22.84108 933.852.32018.611141
4Hornet 4 Drive 21.462581103.083.21519.441031
5Hornet Sportabout18.783601753.153.44017.020032
6Valiant 18.162251052.763.46020.221031
##写入数据与读取数据类似
write.table(df1, "data2.csv", sep=",")
write.csv(df1, "data3.csv")
## xls格式的导入
library(xlsx)
df3 <- read.xlsx("data2.xls",1)
head(df3)
A data.frame: 6 × 6
mpgcyldisphpdratwt
<dbl><dbl><dbl><dbl><dbl><dbl>
121.061601103.902.620
221.061601103.902.875
322.84108 933.852.320
421.462581103.083.215
518.783601753.153.440
618.162251052.763.460
## xlsx格式的导入
df4 <- read.xlsx("data3.xlsx",2)
head(df4)
A data.frame: 6 × 5
qsecvsamgearcarb
<dbl><dbl><dbl><dbl><dbl>
116.460144
217.020144
318.611141
419.441031
517.020032
620.221031
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值