R入门Day2:数据类型1---向量

20200505·Kony·Win10

变量(various):用于存储值保留的内存位置,变量被分配了R对象,并且R对象的数据类型成为变量的数据类型。

R对象类型(Types of R-objects):

  • 向量(vectors):存储数值型、字符型或逻辑型数据的一维数据
  • 列表(lists):一些对相或者成分的有序集合
  • 矩阵(matrices):二维数组,只是每个元素都拥有相同的模式(数值
    型、字符型或逻辑型)
  • 数组(arrays):与矩阵类似,维度可以大于2
  • 因子(factors):名义型变量或有序型变量
  • 数据框(Data Frames):由包含不同内容列构成数据集


    image.png

向量(vector object)

一、向量的数据类型:

  1. 逻辑(logical):TRUE、FALSE
  2. 数值型(numeric)
  3. 整型(integer):1L、0L
  4. 复数型//虚数(complex):3+2i
  5. 字符型(character):“Hello”
  6. 原生型 (raw):

1.1 数据类型的优先权

1.2 创建具有多个元素的向量:c()函数

# 创建多个元素的向量a
a<-c("red","blue","yellow")
a#When we execute the above code, it produces the following result −
[1] "red"    "green"  "yellow"

1. 3 查看数据类型:class()**

x=c(1,2,3,4)
class(a)#When we execute the above code, it produces the following result −
[1] "numeric"

转换数据类型

判断转换 类型转换函数

is.numeric() as.numeric() #数字

is.character() as.character()#字符

is.vector() as.vector() #向量

is.matrix() as.matrix() #矩阵

is.data.frame() as.data.frame() #数据框

is.factor() as.factor() #因子

is.logical() as.logical()#逻辑数据
以上每一行的两个函数都是定义相同类型的函数

a <- c(1,2,3);
a
[1] 1 2 3

is.numeric(a)
[1] TRUE

is.vector(a)
[1] TRUE

a <- as.character(a) #将a转化为字符串类型
a
[1] "1" "2" "3"

is.numeric(a)
[1] FALSE

is.data.frame(a)
[1] FALSE

is.vector(a)
[1] TRUE

is.character(a)
[1] TRUE

as.numeric(FALSE) #逻辑型数据转化为0与1
[1] 0

as.numeric(TRUE)
[1] 1

?不是很懂raw

二、向量应用

向量 的下标是从1开始的

2.1 给向量命名

years <- c(1960,1964,1976,1994)
years
[1] 1960 1964 1976 1994

names(years)<-c("Kennedy", "Johnson", "Carter","Clinton");
years
Kennedy Johnson  Carter Clinton 
   1960    1964    1976    1994

2.2 向量元素的添加及合并

常用函数为c(),append(),如下所示:

v1<-c(1,2,3); # 向量元素的添加
v1
## [1] 1 2 3

v2<-c(v1,55);
v2 
## [1]  1 2  3 55


c(v2,v1) # 向量的合并
## [1]  1 2 3 55 1 2 3

append(v1,10,after=2) #在第2个向量后面加入10
## [1]  1 2 10 3

2.3 向量批量序列的生成

  • a<-c(1:10)
  • seq()
    seq(length=, from=, to=)
    length:指定生成个数;from:是指开始生成的点;to:截止点
    如果不指定,则默认条件下:seq(N1,N2,BY=),其中,n1:开始位置;n2:截止位置;by=指定间隔
v=c(1:10)
v
## [1] 1 2 3 4 5 6 7 8 9 10


seq(length=10,from=10,to=100) # 生成从10到100的向量,一共10个
##  [1] 10  20  30  40  50  60  70  80  90 100
# 此命令等价于:
seq(10,100,10)
##  [1] 10  20  30  40  50  60  70  80  90 100


seq(1,10,by=2)
## [1] 1 3 5 7 9

seq(1,10,length=6)
## [1]  1.0 2.8  4.6  6.4 8.2 10.0


sequence(2:3) #产生以 2 和 3 结尾的序列数据
## [1] 1 2 1 2 3

rep()

  1. rep(P,N) 重复生成P值N次;
  2. rep(a1:a2,a1:a2) #重复a1到a2,按a1产生a1次,按a2产生a2次,如下所示:
rep(1,10)
##  [1] 1 1 1 1 1 1 1 1 1 1

rep(1:5,each=2, times=2) #重复1到5,每个元素重复二次,整个数列重复两次
##  [1] 1 1 2 2 3 3 4 4 5 5 1 1 2 2 3 3 4 4 5 5

rep(1:3,1:3) # 1重复1次,2重复2次,3重复3次
## [1] 1 2 2 3 3 3

2.4 向量索引

取某个元素:x[2];(如果X包括名称,注意:x[2]与x[[2]]的区别;
取某中几个:x[c(1,2,0)]
取某个/几个元素,利用-:x[-n]#取除去第n个元素之外的其他元素

years <- c(1960,1964,1976,1994)
years
[1] 1960 1964 1976 1994
names(years)<-c("Kennedy", "Johnson", "Carter","Clinton");
years
Kennedy Johnson  Carter Clinton 
   1960    1964    1976    1994 
x<-years

x[2]
Johnson 
   1964 

x[[2]]
[1] 1964

2.5 向量排序

sort(); 输出排序后的结果;order();输出排序后的各个向量位置,如下所示:

a<-c(3,9,0,12,19)

sort(a)
## [1]  0 3 9 12 19

order(a)
## [1] 3 1 2 4 5

2.6 向量:提取满足某一条件的向量

x[n] 第n个元素

x[-n] 除了第n个元素的x

x[1:n] 前n个元素

x[-(1:n)] 第n+1至最后的元素

x[c(1,4,2) ] 指定元素

x["name"] 名为"name"的元素

x[x > 3] 所有大于3的元素

x[x > 3 & x < 5] 区间(3,5)的元素

x[x %in% c ("a","and","the")] 给定组中的元素

x<-c(10:1);
x
##  [1] 10 9  8  7 6  5  4 3  2  1

x[x==3]<-25;
x #将x中等于3的元素变为25
##  [1] 10 9  8  7 6  5  4 25 2  1

x[x=1]<-12;
x #将x的第1个元素数值变为12
##  [1] 12 9  8  7 6  5  4 25 2  1

letters[1:30] # 产生字母序列
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q"
## [18] "r" "s" "t" "u" "v" "w" "x" "y" "z" NA  NA  NA  NA

a <- c(2,3,4,2,5,1,6,3,2,5,8,5,7,3);
a
##  [1] 2 3 4 2 5 1 6 3 2 5 8 5 7 3

which.max(a) # 找出最大元素的下标
## [1] 11

which.min(a) # 找出最小的元素下标
## [1] 6

a[which.max(a)] # 找出最大的元素
## [1] 8

which(a==2) # 等于2的元素的下标
## [1] 1 4 9

a[which(a==2)] # 等于2的元素
## [1] 2 2 2

which(a>5) # 大于5的元素的下标
# [1]  7 11 13

a[which(a>5)] # 大于5的元素
## [1] 6 8 7
data <- 1:100
data[data > 20] # 取data 中大于20 的对象出来
# [1]  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44
[25]  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68
[49]  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92
[73]  93  94  95  96  97  98  99 100

data > 20 是一个表示式,它的返回值是一个有TRUE和FALSE 构成的逻辑向量,最终只选取了TRUE对应的元素,所以data 中大于20的元素被选了出来。

data > 20
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [17] FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
 [33]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
 [49]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
 [65]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
 [81]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
 [97]  TRUE  TRUE  TRUE  TRUE
  • ==操作符用来判断字符串相等,which 函数返回对应的下标,letters 这个向量中,第一个元素就是字母a, 所以返回值为1
  • %in%操作符用来判断操作符左边的向量中的元素是否位于操作符右边的向量中,通过这种集合操作,可以方便的一次返回多个下标,使用subset函数也可以提取满足某一条件的向量元素,如下所示:
which(letters == "a")
#[1] 1

letters
# [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x"
#[25] "y" "z"

which(letters %in% c("a", "d", "e"))
#[1] 1 4 5

2.7 ifelse

x <- c(1,1,1,0,0,1,1);
x #[1] 1 1 1 0 0 1 1

ifelse(x != 1, 1, 0) #若果x的值不等于1,输出1,否则输出0 #[1] 0 0 0 1 1 0 0

ifelse和%in%的联合使用,如下所示:

ifelse(x %in% 1, 1, 0) #若x的值包含在1里面,输出1,否者输出0
#[1] 1 1 1 0 0 1 1

ifelse(x %in% 1, 'yes', 'no') #若x的值包含在1里面,输出yes,否者输出no
#[1] "yes" "yes" "yes" "no"  "no"  "yes" "yes"

which(x %in% 1) # 输出x包含在1中值的位置
#[1] 1 2 3 6 7

y <- c(2, 1, 3, 4)
z <- c(1, 4)
ifelse(y %in% z, which(y==z), 0 ) ##若y的值包含在z里面,输出y==z的位置,否者输出0
#[1] 0 4 0 4

ifelse(y %in% z, which(y==z), 0 ) ##若y的值包含在z里面,输出y==z的位置,否者输出0,
#[1] 0 4 0 4

> #此例中没有找到y==z的值, 输出为NA。
ifelse(y %in% z, 1, 0 )
#[1] 0 1 0 1

2.8 向量的比较

x<-c(1,2,3)
y<-c(1,2,3)
z<-c(1,2,4);
x;y;z
## [1] 1 2 3
## [1] 1 2 3
## [1] 1 2 4

x==y;x==z;y==z #分别比较x,y,z的各个元素
## [1] TRUE TRUE TRUE
## [1]  TRUETRUE FALSE
## [1]  TRUETRUE FALSE

identical(x,y);identical(x,z);identical(z,y) #比较x,y,z的整体
## [1] TRUE
## [1] FALSE
## [1] FALSE

all.equal(x,y) #比较数值型变量是否“近似相等”
## [1] TRUE

2.9 两组数据的集合运算

> #首先对集合A,B,C赋值
A<-1:10
B<-seq(5,15,2)
C<-1:5

union(A,B)#求A和B的并集
 #[1]  1  2  3  4  5  6  7  8  9 10 11 13 15

intersect(A,B)  #求A和B的交集
#[1] 5 7 9

setdiff(A,B) #求A-B
#[1]  1  2  3  4  6  8 10

setdiff(B,A) #求B-A
#[1] 11 13 15

setequal(A,B) # 检验集合A,B是否相同
#[1] FALSE

is.element(12,C) #检验元素12是否属于集合C
#[1] FALSE

all(C%in%A) #检验集合A是否包含C
#[1] TRUE

all(C%in%B)
#[1] FALSE

match(C,B)
#[1] NA NA NA NA  1

%in%这个操作符只返回逻辑向量TRUE 或者FALSE,而且返回值应该与%in%这个操作符前面的向量程度相等。也就是说它相当于遍历了C里面的一个个元素,判断它们是否在B中出现过,然后返回是或者否即可。

而match(C,B)的结果就很不一样了,它的返回结果同样与前面的向量等长,但是它并非返回逻辑向量,而是遍历了C里面的一个个元素,判断它们是否在B中出现过,如果出现就返回在B中的索引号,如果没有出现,就返回NA。

笔记参考:R语言基础--数据类型之向量https://www.jianshu.com/p/7b47a6bbb7a9

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343