R語言基礎教程 | 數(shù)據(jù)結構—向量

一、簡介

R擁有許多用于存儲數(shù)據(jù)的對象類型,包括標量、向量、矩陣、數(shù)組、數(shù)據(jù)框和列表。它們在存儲數(shù)據(jù)的類型、創(chuàng)建方式、結構復雜度,以及用于定位和訪問其中個別元素的標記等方面均有所不同。下圖給出了這些數(shù)據(jù)結構的一個示意圖。

圖片

對于數(shù)據(jù)的運算,和其他語言差不多。

圖片

一、創(chuàng)建向量

1. c()

向量的創(chuàng)建向量是用于存儲數(shù)值型、字符型邏輯型數(shù)據(jù)的一維數(shù)組。執(zhí)行組合功能的函數(shù)c()可用來創(chuàng)建向量。各類向量如下例所示:

> a <- c(1,2,3,4,5,6)
> b <- c("aaa","bbb","ccc")
> c <- c(TRUE,FALSE)

這里,a是數(shù)值型向量,b是字符型向量,而c是邏輯型向量。注意,單個向量中的數(shù)據(jù)必須擁有相同的類型或模式(數(shù)值型、字符型或邏輯型)。同一向量中無法混雜不同模式的數(shù)據(jù)。

使用的冒號用于生成一個數(shù)值序列。例如,a <- c(2:6)等價于a <- c(2,3, 4, 5, 6)。

> a <- c(2:6)
> a
[1] 2 3 4 5 6


> b <- c(2,3, 4, 5, 6)
> b
[1] 2 3 4 5 6

2.創(chuàng)建向量的函數(shù)seq()函數(shù)

(1) seq()函數(shù)可以用來創(chuàng)建向量,下面是創(chuàng)建1-9,步長為2 向量

> v1 = seq(1,9,by =2)
> v1
[1] 1 3 5 7 9

(2) 也可以不指定步長,指定個數(shù),R會自己計算步長

> seq(0, 1, length.out = 11)
 [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0

(3) 如果不寫開始的數(shù)和步長,默認從1開始,步長為1

> seq(17)
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17

> seq(-6)
[1]  1  0 -1 -2 -3 -4 -5 -6

(4) 不指定起始值,就不能定義步長

> seq(9,by=2)
錯誤于seq.default(9, by = 2) : 'by'參數(shù)的正負號不對

更多seq()的使用方法通過help("seq")查看。

## Default S3 method:
seq(from = 1, to = 1, by = ((to - from)/(length.out - 1)),
    length.out = NULL, along.with = NULL, ...)
seq.int(from, to, by, length.out, along.with, ...)
seq_along(along.with)
seq_len(length.out)

二、訪問向量中的元素

通過在方括號中給定元素所處位置的數(shù)值,我們可以訪問向量中的元素。例如,a[c(2, 4)]用于訪問向量a中的第二個和第四個元素。

> a <- c(1,2,3,4,5,6)


> a[1:3]
[1] 1 2 3


> a[c(1,3)]   # 給了一個向量c()
[1] 1 3

三、向量的其他操作

1. rep()函數(shù)

rep()函數(shù)可以用來重復復制元素。

# 把1重復五遍
> rep(1,5)         
[1] 1 1 1 1 1


> v1 <-c(11,12,13,14,15)
> rep(v1,2)
 [1] 11 12 13 14 15 11 12 13 14 15


# 1-4重復2次
> rep(1:4, 2)
[1] 1 2 3 4 1 2 3 4

# 1-4的每個元素重復2次,注意和上面的區(qū)別
> rep(1:4, each = 2)
[1] 1 1 2 2 3 3 4 4

# 指定每個元素的重復次數(shù)
> rep(1:4, c(2,2,2,2))
[1] 1 1 2 2 3 3 4 4

#指定每個元素的重復次數(shù)
> rep(1:4, c(2,1,2,1))
[1] 1 1 2 3 3 4

# each = 2指定了1-4每個元素重復2次,理論上有8個元素,但又指定的元素的總長度len = 4,因此后面的3 3 4 4沒有顯示。
> rep(1:4, each = 2, len = 4)
[1] 1 1 2 2


# 指定了總長度為len = 10,但rep(1:4, each = 2)的結果只要8個元素。不足10個,會從頭自動補齊。所以多了1 1.
> rep(1:4, each = 2, len = 10)
 [1] 1 1 2 2 3 3 4 4 1 1

# 先每個元素重復2次后,再重復3次
> rep(1:4, each = 2, times = 3)
 [1] 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4

2. c() 向量連接

要注意的是,向量連接只能用于同一類型的數(shù)據(jù),同為數(shù)值,同為字符串或布爾值。

> c1 <- c(1,2,3,4)
> c1
[1] 1 2 3 4
> c2<- c(5,6,7,8)
> c2
[1] 5 6 7 8


> c3 <- c(c1,c2)
> c3 
[1] 1 2 3 4 5 6 7 8

3. 向量拼接

# 按列拼接
> cbind(c1,c2)
     c1 c2
[1,]  1  5
[2,]  2  6
[3,]  3  7
[4,]  4  8

# 按行拼接
> rbind(c1,c2)
   [,1] [,2] [,3] [,4]
c1    1    2    3    4
c2    5    6    7    8

4. 向量運算

長度相等的向量進行加減乘除運算時,對應元素進行相應的運算

> c1 <- c(1,2,3,4)
> c2<- c(5,6,7,8)
> c1+c2
[1]  6  8 10 12
> c1*c2
[1]  5 12 21 32
> c1/c2
[1] 0.2000000 0.3333333 0.4285714 0.5000000

如果2個向量長度不等,會按照短的向量重復運算補齊

> c3 <- c(c1,c2)
> c1+c3
[1]  2  4  6  8  6  8 10 12

轉(zhuǎn)自:https://mp.weixin.qq.com/s?__biz=MzA4NDAzODkzMA==&mid=2651263668&idx=1&sn=879cecbb60a399ddfcb9329dd54f1c91&chksm=841ef6c9b3697fdf1955c64a02818fda7be681db94447ddeceeffc8e9d467bf089ff1dd9a308&scene=21#wechat_redirect

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容