R 学习笔记《三》 R语言初学者指南

Wesley13
• 阅读 506

1 使用 c,cbind,rbind结合变量

之前获得四列数据 Wingcrd,Tarsus,Head,Wt

每个列包含8个数据,可以通过c继续连接变量

> BirdData <- c(Wingcrd,Tarsus,Head,Wt)
> BirdData
 [1] 59.0 55.0 53.5 55.0 52.5 57.5 53.0 55.0 22.3 19.7 20.8 20.3 20.8 21.5
[15] 20.6 21.5 31.2 30.4 30.6 30.3 30.3 30.8 32.5   NA  9.5 13.8 14.8 15.2
[29] 15.5 15.6 15.6 15.7

BirdData是长度为32的单个向量,符号[1],[15],[29]不需要考虑不同电脑有不同的现实。这只是单个向量,R并没有区分这些值都属于哪一个变量。通过:

Id <- c(1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4)
Id <- rep(c(1,2,3,4),each = 8)
Id <- rep(1:4,each = 8)
这三个表达式效果是一样的

> Id <- rep(1:4,each = 8)
> Id
 [1] 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4

a <- seq(from =1 ,to = 4,by = 1)
rep(a,each = 8)
效果:

> a <- seq(from =1 ,to = 4,by = 1)
> rep(a,each = 8)
 [1] 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4

VarNames <- c("Wingcrd","Tarsus","Head","Wt")
Id2 <- rep(VarNames,each = 8)

> VarNames <- c("Wingcrd","Tarsus","Head","Wt")
> Id2 <- rep(VarNames,each = 8)
> Id2
 [1] "Wingcrd" "Wingcrd" "Wingcrd" "Wingcrd" "Wingcrd" "Wingcrd" "Wingcrd"
 [8] "Wingcrd" "Tarsus"  "Tarsus"  "Tarsus"  "Tarsus"  "Tarsus"  "Tarsus" 
[15] "Tarsus"  "Tarsus"  "Head"    "Head"    "Head"    "Head"    "Head"   
[22] "Head"    "Head"    "Head"    "Wt"      "Wt"      "Wt"      "Wt"     
[29] "Wt"      "Wt"      "Wt"      "Wt"     

req(VarNames,8):

> rep(VarNames,8)
 [1] "Wingcrd" "Tarsus"  "Head"    "Wt"      "Wingcrd" "Tarsus"  "Head"   
 [8] "Wt"      "Wingcrd" "Tarsus"  "Head"    "Wt"      "Wingcrd" "Tarsus" 
[15] "Head"    "Wt"      "Wingcrd" "Tarsus"  "Head"    "Wt"      "Wingcrd"
[22] "Tarsus"  "Head"    "Wt"      "Wingcrd" "Tarsus"  "Head"    "Wt"     
[29] "Wingcrd" "Tarsus"  "Head"    "Wt"     

cbind函数将结合的变量以列的形式输出


> Z <- cbind(Wingcrd,Tarsus,Head,Wt)
> Z
     Wingcrd Tarsus Head   Wt
[1,]    59.0   22.3 31.2  9.5
[2,]    55.0   19.7 30.4 13.8
[3,]    53.5   20.8 30.6 14.8
[4,]    55.0   20.3 30.3 15.2
[5,]    52.5   20.8 30.3 15.5
[6,]    57.5   21.5 30.8 15.6
[7,]    53.0   20.6 32.5 15.6
[8,]    55.0   21.5   NA 15.7

访问Z的第一列

> Z[,1]
[1] 59.0 55.0 53.5 55.0 52.5 57.5 53.0 55.0
> Z[1:8,1]
[1] 59.0 55.0 53.5 55.0 52.5 57.5 53.0 55.0

访问Z的第一行

> Z[1,]
Wingcrd  Tarsus    Head      Wt 
   59.0    22.3    31.2     9.5 
> Z[1,1:4]
Wingcrd  Tarsus    Head      Wt 
   59.0    22.3    31.2     9.5 

同样可以使用的访问方式:

Z[1,]
Z[1,1:4]
Z[1,1]
Z[,2:3]
X <- Z[4,4]
Y <- Z[,4]
W <- Z[,3]得到第三列的数据
D <- Z[,c(1,3,4)]得到1,3,4列的所有数据
E <- Z[,c(-1,-3)] 负号表示排除第一第三列

显示Z的维数

dim(Z)

> dim(Z)
[1] 8 4

只查看Z行数

> Nrows <- dim(Z)[1]
> Nrows
[1] 8

rbind与cbind函数类似,只不过前者以行的形式表示数据,后者以列的形式表示数据

> Z2 <- rbind(Wingcrd,Tarsus,Head,Wt)
> Z2
        [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
Wingcrd 59.0 55.0 53.5 55.0 52.5 57.5 53.0 55.0
Tarsus  22.3 19.7 20.8 20.3 20.8 21.5 20.6 21.5
Head    31.2 30.4 30.6 30.3 30.3 30.8 32.5   NA
Wt       9.5 13.8 14.8 15.2 15.5 15.6 15.6 15.7

使用vector表示数据

> W <- vector(length = 8)
> W[1] <- 59
> W[2] <- 55
> W[3] <- 53.5
> W[4] <- 55
> W[5] <- 52.5
> W[6] <- 57.5
> W[7] <- 53
> W[8] <- 55
> W
[1] 59.0 55.0 53.5 55.0 52.5 57.5 53.0 55.0

说明:

在输入 W <- vector(length = 8)之后直接再输入W会得到一个FALSE的响应值。

必须在所有元素的值都输入之后才可以输入W查看数据

可以通过W[1],W[1:4],W[2:6],W[-2],W[c(1,2,3)]等查看数据

通过矩阵结合数据

> Dmat <- matrix(nrow = 8,ncol = 4)
> Dmat
     [,1] [,2] [,3] [,4]
[1,]   NA   NA   NA   NA
[2,]   NA   NA   NA   NA
[3,]   NA   NA   NA   NA
[4,]   NA   NA   NA   NA
[5,]   NA   NA   NA   NA
[6,]   NA   NA   NA   NA
[7,]   NA   NA   NA   NA
[8,]   NA   NA   NA   NA

初始化矩阵

> Dmat[,1] <- c(59,55,53.5,55,52.5,57.5,53,55)
> Dmat[,2] <- c(22.3,19.7,20.8,20.3,20.8,21.5,20.6,21.5)
> Dmat[,3] <- c(31.2,30.4,30.6,30.3,30.3,30.8,32.5,NA) 
> Dmat[,4] <- c(9.5,13.8,14.8,15.2,15.5,15.6,15.6,15.7)
> Dmat
     [,1] [,2] [,3] [,4]
[1,] 59.0 22.3 31.2  9.5
[2,] 55.0 19.7 30.4 13.8
[3,] 53.5 20.8 30.6 14.8
[4,] 55.0 20.3 30.3 15.2
[5,] 52.5 20.8 30.3 15.5
[6,] 57.5 21.5 30.8 15.6
[7,] 53.0 20.6 32.5 15.6
[8,] 55.0 21.5   NA 15.7

使用colnames函数给矩阵Dmat的列添加名称

> colnames(Dmat) <- c("Wingcrd","Tarsus","Head","Wt")
> Dmat
     Wingcrd Tarsus Head   Wt
[1,]    59.0   22.3 31.2  9.5
[2,]    55.0   19.7 30.4 13.8
[3,]    53.5   20.8 30.6 14.8
[4,]    55.0   20.3 30.3 15.2
[5,]    52.5   20.8 30.3 15.5
[6,]    57.5   21.5 30.8 15.6
[7,]    53.0   20.6 32.5 15.6
[8,]    55.0   21.5   NA 15.7

当数据按照变量进行了分类,则可以:

> Dmat2 <- as.matrix(cbind(Wingcrd,Tarsus,Head,Wt))
> Dmat2
     Wingcrd Tarsus Head   Wt
[1,]    59.0   22.3 31.2  9.5
[2,]    55.0   19.7 30.4 13.8
[3,]    53.5   20.8 30.6 14.8
[4,]    55.0   20.3 30.3 15.2
[5,]    52.5   20.8 30.3 15.5
[6,]    57.5   21.5 30.8 15.6
[7,]    53.0   20.6 32.5 15.6
[8,]    55.0   21.5   NA 15.7

使用data.frame函数结合数据

使用数据框结合具有相同长度的变量,而数据框的每一行就包含有统一样本的不同观察值。

eg:

> Dfrm <- data.frame(WC = Wingcrd,TS = Tarsus,HD=Head,W=Wt)
> Dfrm
    WC   TS   HD    W
1 59.0 22.3 31.2  9.5
2 55.0 19.7 30.4 13.8
3 53.5 20.8 30.6 14.8
4 55.0 20.3 30.3 15.2
5 52.5 20.8 30.3 15.5
6 57.5 21.5 30.8 15.6
7 53.0 20.6 32.5 15.6
8 55.0 21.5   NA 15.7

数据框的优点:可以在不改变原始数据的基础上改变数据。eg:

> Dfrm2 <- data.frame(WC = Wingcrd,TS = Tarsus,HD=Head,Wsq=sqrt(Wt))
> Dfrm2
    WC   TS   HD      Wsq
1 59.0 22.3 31.2 3.082207
2 55.0 19.7 30.4 3.714835
3 53.5 20.8 30.6 3.847077
4 55.0 20.3 30.3 3.898718
5 52.5 20.8 30.3 3.937004
6 57.5 21.5 30.8 3.949684
7 53.0 20.6 32.5 3.949684
8 55.0 21.5   NA 3.962323

Wt和W是不同的实体,验证:

 > rm(Wt)
> Wt
错误: 找不到对象'Wt'
> Dfrm$W
[1]  9.5 13.8 14.8 15.2 15.5 15.6 15.6 15.7

数据框通常的用法:

向R中输入数据后对数据做些改变(移出极端值,应用变化,增加分类变量等等),再将数据存入数据框中以备后续分析。

使用list结合数据

以list结合数据,list中的每一个数据既可以是向量,也可以是单个的数据等。其中向量的维数可能一样也可能不一样。

eg

> X1 <- c(1,2,3)
> X2 <- c("a","b","c","d")
> X3 <- 3
> X4 <- matrix(nrow = 2 , ncol = 2)
> X4[,1] <- c(1,2)
> X4[,2] <- c(3,4)
> Y <- list(LX1=X1,LX2=X2,LX3=X3,LX4=X4)
> Y
$LX1
[1] 1 2 3

$LX2
[1] "a" "b" "c" "d"

$LX3
[1] 3

$LX4
     [,1] [,2]
[1,]    1    3
[2,]    2    4

list的重要性:

线性回归,广义线性回归,t-检验等的结果一般都保存在list中

> M <- lm(WC ~ W,data = Dfrm)
> M

Call:
lm(formula = WC ~ W, data = Dfrm)

Coefficients:
(Intercept)            W  
    65.5315      -0.7239  
纤细分析的结果存储在:
> names(M)
 [1] "coefficients"  "residuals"     "effects"       "rank"         
 [5] "fitted.values" "assign"        "qr"            "df.residual"  
 [9] "xlevels"       "call"          "terms"         "model"        

可以通过以下方式访问具体的值

> M$coefficients
(Intercept)           W 
 65.5315140  -0.7238731 
> M$residuals
         1          2          3          4          5          6          7 
 0.3452800 -0.5420659 -1.3181928  0.4713564 -1.8114817  3.2609056 -1.2390944 
         8 
 0.8332929 
> M$effects
 (Intercept)            W                                        
-155.7402686    4.0250694   -1.2416235    0.5887546   -1.6634618 
                                       
   3.4191327   -1.0808673    1.0017273 

综合:

> AllData <- list(BirdData = BirdData,Id = Id2,Z = Z,VarNames = VarNames)
> AllData
$BirdData
 [1] 59.0 55.0 53.5 55.0 52.5 57.5 53.0 55.0 22.3 19.7 20.8 20.3 20.8 21.5
[15] 20.6 21.5 31.2 30.4 30.6 30.3 30.3 30.8 32.5   NA  9.5 13.8 14.8 15.2
[29] 15.5 15.6 15.6 15.7

$Id
 [1] "Wingcrd" "Wingcrd" "Wingcrd" "Wingcrd" "Wingcrd" "Wingcrd" "Wingcrd"
 [8] "Wingcrd" "Tarsus"  "Tarsus"  "Tarsus"  "Tarsus"  "Tarsus"  "Tarsus" 
[15] "Tarsus"  "Tarsus"  "Head"    "Head"    "Head"    "Head"    "Head"   
[22] "Head"    "Head"    "Head"    "Wt"      "Wt"      "Wt"      "Wt"     
[29] "Wt"      "Wt"      "Wt"      "Wt"     

$Z
     Wingcrd Tarsus Head   Wt
[1,]    59.0   22.3 31.2  9.5
[2,]    55.0   19.7 30.4 13.8
[3,]    53.5   20.8 30.6 14.8
[4,]    55.0   20.3 30.3 15.2
[5,]    52.5   20.8 30.3 15.5
[6,]    57.5   21.5 30.8 15.6
[7,]    53.0   20.6 32.5 15.6
[8,]    55.0   21.5   NA 15.7

$VarNames
[1] "Wingcrd" "Tarsus"  "Head"    "Wt"     

分别取其中的某一个元素

> AllData$BirdData
 [1] 59.0 55.0 53.5 55.0 52.5 57.5 53.0 55.0 22.3 19.7 20.8 20.3 20.8 21.5
[15] 20.6 21.5 31.2 30.4 30.6 30.3 30.3 30.8 32.5   NA  9.5 13.8 14.8 15.2
[29] 15.5 15.6 15.6 15.7
> AllData$Id
 [1] "Wingcrd" "Wingcrd" "Wingcrd" "Wingcrd" "Wingcrd" "Wingcrd" "Wingcrd"
 [8] "Wingcrd" "Tarsus"  "Tarsus"  "Tarsus"  "Tarsus"  "Tarsus"  "Tarsus" 
[15] "Tarsus"  "Tarsus"  "Head"    "Head"    "Head"    "Head"    "Head"   
[22] "Head"    "Head"    "Head"    "Wt"      "Wt"      "Wt"      "Wt"     
[29] "Wt"      "Wt"      "Wt"      "Wt"     
> AllData$Z
     Wingcrd Tarsus Head   Wt
[1,]    59.0   22.3 31.2  9.5
[2,]    55.0   19.7 30.4 13.8
[3,]    53.5   20.8 30.6 14.8
[4,]    55.0   20.3 30.3 15.2
[5,]    52.5   20.8 30.3 15.5
[6,]    57.5   21.5 30.8 15.6
[7,]    53.0   20.6 32.5 15.6
[8,]    55.0   21.5   NA 15.7

注意:在list中只能使用= 不能使用 <-

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
2年前
Spring Boot日志集成
!(https://oscimg.oschina.net/oscnet/1bde8e8d00e848be8b84e9d1d44c9e5c.jpg)SpringBoot日志框架SpringBoot支持JavaUtilLogging,Log4j2,Lockback作为日志框架,如果你使用star
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这