R语言实战(创建数据集)

创建数据集

什么叫数据集?
数据集通常是由数据构成的矩形数组,行表示观测,列表示变量
如下面的病例数据集

  patientID age diabetes    status
1         1  25    Type1      Poor
2         2  34    Type2  Improved
3         3  28    Type1 Excellent
4         4  52    Type1      Poor

在R语言中用于储存数据的结构有标量,向量,数组,数据框和列表。可以用来处理的数据类型有数值型,字符型,逻辑型(FALSE/TRUE),复数型,原生型(字节)。
*

数据结构

向量
向量用于储存数值型,字符型或逻辑型数据的一维数组。用c()创建向量,如

<-就是等号的意思
a<-c(1,2,3,4,5,6)
b<-c("one","two","three")
c<-c(TRUE,TRUE,FALSE,FALSE)

标量是只含有一个元素的向量如

f<-3
g<-"us"
h<-true

通过[ ]来访问向量中的元素
注意在r语言中第一个元素的索引为1

> a<-c("k","j","h","g","f","f")
> a[3]
[1] "h"
> a[c(1,3,5)]
[1] "k" "h" "f"
> a[2:6]
[1] "j" "h" "g" "f" "f"

矩阵

创建矩阵

创建矩阵一般通过matrix()函数,默认情况下是竖着填充元素,如下面这个例子,将1到20竖着排入矩阵,nrow=5代表矩阵有5行,当然呢以后可以只定义nrow或ncol中的一个

> 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

这里我设定了byrow=TRUE,即将元素按行进行填充,然后用dimnames设定行名和列名。

> cells<-c(1,26,24,68)
> rnames<-c("r1","r2")
> cnames<-c("c1","c2")
> mymatrix<-matrix(cells,nrow = 2,ncol=2,byrow = TRUE,dimnames=list(rnames,cnames))
> mymatrix
   c1 c2
r1  1 26
r2 24 68

矩阵下标的使用

用[ ]进行截取,注意逗号,如果直取第二列的话[ , 2 ],行的话同理,如果要选择第一行第2列到第五列的元素可以用[1,c(2:5)]

> x<-matrix(1:10,nrow = 2)
> x
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    3    5    7    9
[2,]    2    4    6    8   10
> x[2,]
[1]  2  4  6  8 10
> x[,2]
[1] 3 4
> x[2,2]
[1] 4
> x[1,c(2:5)]
[1] 3 5 7 9

数组

数组的创建
函数为array,注意c(2,3,4)表示,创建4个矩形矩阵,每个矩阵2行3列

> 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

访问数组

> v1 <- c(5,9,3)
> v2 <- c(10,11,12,13,14,15)
> z<-array(c(v1,v2),dim = c(3,3,2))
> z
, , 1

     [,1] [,2] [,3]
[1,]    5   10   13
[2,]    9   11   14
[3,]    3   12   15

, , 2

     [,1] [,2] [,3]
[1,]    5   10   13
[2,]    9   11   14
[3,]    3   12   15
> z[,3,2]
[1] 13 14 15
#提取第二个矩阵中的第三列

数据框
不同的可以包含不同模式(数值型 字符型)的数据。
创建函数data.frame()

> manager<-c(1,2,3,4,5)
> data<-c('10/24/08','10/28/08','10/1/08','10/12/08','5/1/09')
> country<-c('US','US','UK','UK','UK')
> gender<-c('M','F','F','M','F')
> age<-c(32,45,25,39,99)
> q1<-c(5,3,3,3,2)
> q2<-c(4,5,5,3,2)
> q3<-c(5,2,5,4,1)
> q4<-c(5,5,5,NA,2)
> q5<-c(5,5,2,NA,1)
> leadership<-data.frame(manager,data,country,gender,age,q1,q2,q3,q4,q5,stringsAsFactors = FALSE)
> leadership
  manager     data country gender age q1 q2 q3 q4 q5
1       1 10/24/08      US      M  32  5  4  5  5  5
2       2 10/28/08      US      F  45  3  5  2  5  5
3       3  10/1/08      UK      F  25  3  5  5  5  2
4       4 10/12/08      UK      M  39  3  3  4 NA NA
5       5   5/1/09      UK      F  99  2  2  1  2  1

选取数据框中的元素
可以通过$进行,如

> leadership$age
[1] 32 45 25 39 99

可以通过[ ],如

> leadership[1:2]
  manager     data
1       1 10/24/08
2       2 10/28/08
3       3  10/1/08
4       4 10/12/08
5       5   5/1/09

>  leadership[c("manager","data")]
  manager     data
1       1 10/24/08
2       2 10/28/08
3       3  10/1/08
4       4 10/12/08
5       5   5/1/09

在截取的过程中常常使用attach(),with()函数来简化代码,

> with(leadership,{
+     newdatas<<-leadership[gender=="F" & age>30,]
+ })
> newdatas
  manager     data country gender age q1 q2 q3 q4 q5
2       2 10/28/08      US      F  45  3  5  2  5  5
5       5   5/1/09      UK      F  99  2  2  1  2  1

在使用with的过程中注意<<-,可以继续调用with函数内部的newdatas如果使用<-那么跑出with函数后,将不能继续使用newdatas
这里使用with的话,可以直接使用gender,而不用使用leadershi$gender

因子

可以通过factor()函数创建因子,factor()函数的第一个参数必须是字符向量,通过levels参数显式设置因子水平,

变量可以分为名义型,有序型,连续型变量。
名义型是没有顺序之分的类别
有序型表示一种顺序关系
连续型可以呈现某个范围内的任意值
名义型和有序型变量在R中称为因子
注意:如果把数字作为因子,那么在导入数据之后,需要将向量转换为因子(factor),而因子在整个计算过程中不再作为数值,而是一个"符号"而已

> x<-c(4, 6 ,4 ,6 ,6 ,6 ,6 ,3 ,1 ,4 ,5, 3 ,1 ,2 ,6, 4 ,5 ,3 ,6, 2)
> x
 [1] 4 6 4 6 6 6 6 3 1 4 5 3 1 2 6 4 5 3 6 2
> fact<-factor(x)
> fact#有六个水平:1 2 3 4 5 6
 [1] 4 6 4 6 6 6 6 3 1 4 5 3 1 2 6 4 5 3 6 2
Levels: 1 2 3 4 5 6

指定因子水平的名称

> x<-c(4, 6 ,4 ,6 ,6 ,6 ,6 ,3 ,1 ,4 ,5, 3 ,1 ,2 ,6, 4 ,5 ,3 ,6, 2)
> fact<-factor(x,label=c("A","B","C","D","E","F"))
> fact
 [1] D F D F F F F C A D E C A B F D E C F B
Levels: A B C D E F

定义有序的水平

> x<-c(4, 6 ,4 ,6 ,6 ,6 ,6 ,3 ,1 ,4 ,5, 3 ,1 ,2 ,6, 4 ,5 ,3 ,6, 2)
> fact<-factor(x,label=c("A","B","C","D","E","F"),order=T)
> fact
 [1] D F D F F F F C A D E C A B F D E C F B
Levels: A < B < C < D < E < F

列表

某个列表中可能是若干向量,矩阵,数据框或者是其他列表的组合

> g<-"my first list"
> h<-c(25,26,18,39)
> j<-matrix(1:10,nrow=5)
> k<-c("one","two","three")
> mylist<-list(title=g,ages=h,j,k)
> mylist
$title
[1] "my first list"

$ages
[1] 25 26 18 39

[[3]]
     [,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10

[[4]]
[1] "one"   "two"   "three"

使用双重方括号来访问列表中的元素

> mylist[[2]]
[1] 25 26 18 39

>  mylist[["ages"]]
[1] 25 26 18 39`

数据的读入

mydata<-read.table(file,options)

常用options
header 是否在第一行包含逻辑性变量,一般header=TRUE
sep 分开数值的分隔符 如sep="\t"以制表符进行分开

注意读入数据之前先用getwd()查看当前工作路径

> getwd()
[1] "C:/Users/Administrator/Documents"

然后再用setwd()切换工作路径,要切换到与所要导入的数据相同的目录下

> setwd("..")
> getwd()
[1] "C:/Users/Administrator"

当然呢也可以直接给定文件的绝对路径

欢迎来自家的小屋,我也刚开始 学习R语言,希望大家可以一起学习呀~~
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值