R语言入门_r语言y<-x[c(2,4)]-程序员宅基地

技术标签: R  R语言  大数据  

目录

一、标量

检验数据类型

强制类型转换

二、向量

1.生成有规律的向量

 2.使用seq(from,to,by)生成向量

 3.rep(x,...) 生成满足条件的重复向量

 4.逻辑向量的生成

三、矩阵 

矩阵的拉直 

 四、数组

 五、数据框

 六、因子

 七、列表


一、标量

在R语言中赋值采用<-或者=

a<-4 数值类型标量
b<-"hello"

字符串类型标量

c<-"t" 字符类型标量
f<-TRUE 布尔类型标量

检验数据类型

is.numeric(a) 判断a是不是数值型对象
is.character(a) 判断a是不是字符型对象

强制类型转换

s<-as.character(a) 将a转换成字符串类型赋值给s,a本身的类型不变
a<-as.character(a) 将a转换成字符串类型赋值给a,a本身类型变成字符型变量

二、向量

向量使用<-c来赋值,其中,向量的每一个元素的分隔符为“,”

num<-c(9,2,-3,5,6,7,8,9) 数值型向量
ord<-c("a","wdw","23") 字符型向量
logv1<-c(T,T,T,TF,F,F) 逻辑型向量
logv2<-c(True,TRUE,FALSE) 逻辑型向量

1.生成有规律的向量

直接使用a:b的形式,生成从a到b的数列,如果a>b就逐项+1,否则逐项-1

从我们下面的代码中可以看出我们冒号的优先级比×和-高

 2.使用seq(from,to,by)生成向量

第一个参数为起始值,第二个参数为终止值,第三个数为步长

当然我们也可以直接设置整个向量的长度来生成我们的向量 

 3.rep(x,...) 生成满足条件的重复向量

rep(1,times=10)
x <- c(1,2,3,4)
rep(x,times=3)
rep(x,length.out=10)
rep(x,each=2)
rep(x,times=c(1,2,2,3))
rep("abc",5)
y <- c("a","b","c")
rep(y,2)
rep(y,length.out=10)
rep(y,times=c(1,2,3))

 4.逻辑向量的生成

z <- c(8,3,5,7,6,2,8,9)
n <- z > 5
#判断z中的全部元素是不是都大于5
all(z>5)
#判断z中是否有元素大于5
any(z>5)
#从下面的结果中我们可以看出,我们的R语言的数组下表是从1开始的
z[2]
z[1:4]
z[c(2,5,7)]
#-3表示不取第三个元素
z[-3]
#第二个元素和第四个元素不取
z[c(-2,-4)] 
#和上一个代码效果相同,都是第二个元素和第四个元素不取
z[-c(2,4)]

三、矩阵 

①矩阵是二维数组

②矩阵中的元素必须是相同类型的

③生成矩阵需要由函数matrix()实现

mymatrix <- matrix(vector,nrow = number_of_rows,
                                ncol = number_of_columns,
                                byrow = logical_value,

                                dimnames = list(char_vector_rownames, char_vector_colnames))

从下面的运行结果中,我们会发现我们的R语言中的矩阵是默认按照列的形式摆放的。

A <- matrix(1:20,nrow=5) 

 

 当然我们的矩阵也可以试用贴下面的方法生成

values <- c(1,2,3,4)
#创建行索引向量
rnames <- c("r1","r2")
#创建列索引向量
cnames <- c("c1","c2")
#指定我们的矩阵,分别将我们的数值,行数传入,
#byrow默认为FALSE,意思是按照列进行摆放
#如果为TRUE则为按照行进行摆放
#dimnames可以指定我们列和行的名字
C <- matrix(values,nrow=2,byrow=T,
            dimnames=list(rnames,cnames))
C

 

#如果我们将byrow的参数调整为F就会变成如下的形式
D <- matrix(values,nrow=2,byrow=F,
            dimnames=list(rnames,cnames))
D

 第一行代码为找到第一行第二列的数据

第二行代码为找到第一行的全部数据

第三行代码为找到第二列的数据

C[1,2]
C[1,] 
C[,2] 

#查找我们A中第二行,第二列和第四列的焦点所对应的值
A[2,c(2,4)] 
#查找我们A中第一行和第三行与第三列和第四列的焦点所对应的值
A[c(1,3),c(3,4)]
#查看A的维数
dim(A) 
#查看A的行数
nrow(A)
#查看A的列数
ncol(A) 
#查看C矩阵的索引,先返回行索引,再返回列索引
dimnames(C)
#查看A矩阵的索引,先返回行索引,再返回列索引 
dimnames(A)
#设置A的行列索引
dimnames(A) <- list(c("one","two","three","four","five"),
                    c("I","II","III","IV"))
dimnames(A)
A

 

矩阵的拉直 

#将我们的c强制类型转换为向量,然后赋值给我们的horz,也就是将我们的矩阵拉直
#从下面的运行结果中可以看出,我们拉直的方式是按列拉直
horz <- as.vector(C)
horz
C

 

#生成E矩阵,行数为2
E <- matrix(c("a","b","c","d","e","f","g","h"),nrow=2)
E
#生成G矩阵,列数为2
G <- matrix(c("i","j","k","l","m","n","o","p"),nrow=2)
G
#竖着拼接
rbind(E,G) 
#横着拼接
cbind(E,G) 
#生成H矩阵
H <- matrix(1:6,nrow=2)
H
#生成J矩阵
J <- matrix(5:8,ncol=2)
J
#这里我们可以发现,如果我们的列数不同的话,我们是不可以竖着拼接的
rbind(H,J)
#这里我们的行数相同,所以可以横着拼接
cbind(H,J)
#
cbind(E,H)

 

 

 四、数组

①数组与矩阵相似,但是维度必须大于2

②数组中的元素必须是相同类型

③选取数组中匀速的方式与矩阵相同

④数组可以通过函数array创建

一般形式

myarray <- array(vector, dimensions, dimnames)

dim1 <- c("A1","A2")
dim2 <- c("B1","B2","B3")
dim3 <- c("C1","C2","C3","C4")
dim1
dim2
dim3

#将我们从1-24的数据分成两行三列的四个矩阵,其索引分别为dim1,dim2,dim3
exarray <- array(1:24, c(2,3,4),
                 dimnames=list(dim1,dim2,dim3))
exarray
#这里我们取出的是第三个矩阵中的第一行第二列的数据
exarray[1,2,3]

 五、数据框

数据框是由不同类型的数据列组成的类矩阵,可以理解为是一个松散的数据集

创建指令mydata<-data.frame(col1,col2,col3,……)

ID <- c(1,2,3,4)
age <- c(25,34,28,52)
status <- c("Poor","Improved","Excellent","Poor")
diabetes <- c("Type1","Type2","Type1","Type1")
patientdata <- data.frame(ID,age,diabetes,status)
patientdata

 

 

#提取出我们patientdata中的第一列和第二列
patientdata[1:2]
#当然我们也可以指定查找的索引名为具体的对象
patientdata[c("diabetes","status")]
#直接获得patientdata中的age列的元素
patientdata$age
#修改某一列的数据
patientdata$age[2] <- 33
patientdata$diabetes[3] <- "Type2"

现在我们的数据表就被修改成了如下的样子 

 

 六、因子

因子:分类变量和有序变量在R中称为因子

分类变量:也称名义变量,变量的值没有大小关系,没有序列关系,就如同上面表格中病例的一型和二型一样

有序变量:变量的值存在一定的顺序关系,但没有数量关系,就如同上面代码中status中的评价等地(poor,Improved,excellent)

函数:factor(),以一个整数向量的形式存储类别值,整数的取值范围为[1,k],k为水平值的个数。

#diabetes在这里存储的是我们病例的类型,默认是没有顺序的
diabetes <- factor(diabetes)
#status在这里存储的是治疗的效果,并且是有顺序的,但是默认的排序是按照字符的顺序来排序的
status <- factor(status, ordered=T) 
status
#我们的函数的level的排序也可以由我们自行指定
status <- factor(status, ordered=T,
                 levels=c("Poor","Improved","Excellent"))
diabetes
status

 

 七、列表

列表可以看做一些对象(R中的任何数据结构)的有序集合

创建一个列表

mylist <- list(object1, object2,......) 

创建一个列表,并且给列表中的每个对象命名
mylist <- list(name1=object1, name2=object2,......)

g <- "my 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

获取列表中的第二个元素 

mylist[[2]]

 

#在下面的代码中,我们创建了一个列表
#其中第一个元素为ID
#第二个元素为名字
#第三个元素为一个矩阵,并且这个矩阵为两行两三,并且传入的数据是按照行排,不是先按列来
#并且指定我们的维数的索引的列表名字分别为学期名和学科的名字
stu <- list(ID="12345678",name="Ün",
            grade=matrix(c(99,96,88,92,93,87),nrow=2,byrow=T,
                         dimnames=list(c("第一学期","第二学期"),
                                       c("数学分析","高等代数","概率论"))))
stu

​​​​​​​

#查看列表中的ID元素
stu$ID
#查看列表中的名字元素
stu$name
#查看我们列表中的第二个元素,这里列表的下标是从1开始的,不是从0开始的,也就是我们的名字
stu[[2]]
#查看我们的成绩元素
stu$grade
#同上
stu[[3]]
#查看我们的成绩元素中的第二行第三列的元素
stu[[3]][2,3]
#查看成绩元素中的第一行第一列的数据
stu$grade[1,1]
#将我们的名字元素更换为李四
stu$name <- "李四"
#将成绩元素的第一行第二列的位置的数据改成78
stu$grade[1,2] <- 78
stu

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_62684026/article/details/125523689

智能推荐

从零开始构建一个电影知识图谱,实现KBQA智能问答[上篇]:本体建模、RDF、D2RQ、SPARQL endpoint与两种交互方式详细教学_rdb2rdf-程序员宅基地

文章浏览阅读522次。从零开始构建一个电影知识图谱,实现KBQA智能问答[上篇]:本体建模、RDF、D2RQ、SPARQL endpoint与两种交互方式详细教学_rdb2rdf

Linux 防火墙开放特定端口 (iptables)_防火墙放开指定端口 linux iptables-程序员宅基地

文章浏览阅读831次。iptables是linux下的防火墙,同时也是服务名称。service iptables status 查看防火墙状态service iptables start 开启防火墙service iptables stop 关闭防火墙service iptables restart _防火墙放开指定端口 linux iptables

python 实现输入一个小于1000的整数,对其进行因式分解_编写程序,用户从键盘输入小于1000的整数,对其进行因式分解-程序员宅基地

文章浏览阅读1.1w次,点赞10次,收藏50次。编写程序,用户从键盘输入一个小于1000的整数,对其进行因式分解。例如:10=2 X 5 ; 60 = 2 X 2 X 2 X 3 X 5实现这个小程序,主要使用到的思想就是一个简单的递归思想。用户输入一个整数,接收整数,之后把整数传入到递归函数中,使用递归函数计算出该整数的所有最简因式。def index(n): global list1 for i in range(2, n+1): if n % i == 0: # 找出n中最小的因式 _编写程序,用户从键盘输入小于1000的整数,对其进行因式分解

websocket和uni-app里使用websocket_uniapp websocket-程序员宅基地

文章浏览阅读4.4k次,点赞4次,收藏5次。socket:插座;套接字 ​ 网络上的两个程序通过一个双向(全双工)的通信连接实现数据的交换,这个连接的一端称为一个socket。就像用座机打电话,给两个座机都插上电话线,就可以打电话,即语音信息的交流。属性描述readyState只读属性 readyState 表示连接状态,可以是以下值:0 - 表示连接尚未建立。1 - 表示连接已建立,可以进行通信。2 - 表示连接正在进行关闭。3 - 表示连接已经关闭或者连接不能打开。_uniapp websocket

SQL Server调优系列基础篇(常用运算符总结——三种物理连接方式剖析)-程序员宅基地

文章浏览阅读96次。前言上一篇我们介绍了如何查看查询计划,本篇将介绍在我们查看的查询计划时的分析技巧,以及几种我们常用的运算符优化技巧,同样侧重基础知识的掌握。通过本篇可以了解我们平常所写的T-SQL语句,在SQL Server数据库系统中是如何分解执行的,数据结果如何通过各个运算符组织形成的。技术准备基于SQL Server2008R2版本,利用微软的一个更简洁的案例库(Northwind)进行解析...

渗透测试实例:Metasploitable3靶机-程序员宅基地

文章浏览阅读3.8k次,点赞5次,收藏26次。实验环境:Kali虚拟机一台、4G运行,Metasploitable3靶机一台,IP地址192.168.22.20实验目的:对Metasploitable3靶机进行渗透测试实验步骤:(一),对靶机进行扫描1,使用Neuss对靶机进行扫描_metasploitable3

随便推点

一键关闭win10防火墙拦截更新等小工具-程序员宅基地

文章浏览阅读5.8k次。简介:秒关闭win10防火墙拦截更新清爽简单的一款小工具,可以帮助你一键关闭Windows以及烦人的系统自动更新,WIN10防火墙自动删除软件网盘下载地址:http://www.bytepan.com/AkejxHdvOCe_一键关闭win10防火墙拦截更新等小工具

PAT 乙级 1008 数组元素循环右移问题 (20分)(JAVA版,随遇C)_pat乙级1008java-程序员宅基地

文章浏览阅读147次。1008数组元素循环右移问题(20分)一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A​0​​A​1​​⋯A​N−1​​)变换为(A​N−M​​⋯A​N−1​​A​0​​A​1​​⋯A​N−M−1​​)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?输入格式:每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔.._pat乙级1008java

linux kvm虚拟机img文件挂载到宿主机_kvm导入img镜像-程序员宅基地

文章浏览阅读1.5k次。在使用虚拟化的过程中,难免会遇到虚拟机异常导致无法启动等故障,这时候如何从虚拟机的img中将重要文件或数据拷贝出来显得尤为重要,今天介绍一下利用qemu-nbd的方式将img文件挂载到宿主机。需要注意的是,目前仅针对于img文件类型为qcow2的做过测试。1. 检测img文件的类型: file test.img test.img: Qemu Image, Format:_kvm导入img镜像

我的vim和emacs配置文件(2014-05-19更新)_vim/emacs cursor配置-程序员宅基地

文章浏览阅读6.7k次,点赞5次,收藏3次。vimrc:"cnsworder setcolorscheme ronsyntax onset nobackupset tabstop=4set softtabstop=4set shiftwidth=4set expandtabset autoindentset numberset laststatus=2source $VIMRUNTIME/ftplugin/m_vim/emacs cursor配置

Spark Streaming架构及工作原理_题spark streaming包含了丰富的组件,其中包括以下哪些选项astreamingconte-程序员宅基地

文章浏览阅读1.3k次。1、Spark Streaming有哪些组件?2、Micro-Batch Architecture如何理解?3、Spark Streaming工作原理是什么?4、如何进行DStream 操作?一、简介Spark Streaming 是一个对实时数据流进行高通量、容错处理的流式处理系统,可以对多种数据源(如Kafka、Flume、Twitter、Zero和TCP 套接字)进行类似Map、Red..._题spark streaming包含了丰富的组件,其中包括以下哪些选项astreamingcontextb

skywalking 自定义插件_skywalking自定义插件-程序员宅基地

文章浏览阅读3.1k次。环境基于skywalking-java开发,就是skywalking的java agent,这次在基础上开发一个自定义的插件。流程演示首先新建一个model修改pom文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sc._skywalking自定义插件

推荐文章

热门文章

相关标签