1 向量
- 創(chuàng)建
兩種方式:vector()和c()
x1 <- vector(mode = "integer", length = 4) #創(chuàng)建空向量
x2 <- c(1:4)
x3 <- c(1,2,3,4)
- 類型轉(zhuǎn)換
> as.character(x3)
[1] "1" "2" "3" "4"
> x4 <- c("a", "b", "c", "d") #轉(zhuǎn)換應(yīng)該具有意義
> as.numeric(x4)
[1] NA NA NA NA
- 長度
> length(x4)
[1] 4
- 列命名
> names(x4) <- c("1", "2", "3", "4") #長度應(yīng)該不大于向量長度
> x4
1 2 3 4
"a" "b" "c" "d"
- 元素訪問
> x4[1:3] #切片訪問
1 2 3
"a" "b" "c"
> x4[c(1:3)]
1 2 3
"a" "b" "c"
x4[c(1,2,3)] #枚舉訪問
1 2 3
"a" "b" "c"
> x4[-2] #與Python不同蝙寨,負(fù)數(shù)不是倒數(shù)圃验,而是排除掉這一個(gè)
1 3 4
"a" "c" "d"
2 數(shù)組和矩陣
2.1 數(shù)組
array函數(shù)丛忆,維度可大于2,默認(rèn)按列存儲
#創(chuàng)建一個(gè)二維數(shù)組
> y1 <- array(data = 1:6,
+ dim = c(2,3),
+ dimnames = list(
+ c("r1", "r2"),
+ c("c1", "c2", "c3")
+ ))
> y1
c1 c2 c3
r1 1 3 5
r2 2 4 6
#創(chuàng)建一個(gè)三維數(shù)組
z1 <- array(data = 1:12,
+ dim = c(2,3,2))
> z1
, , 1
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
, , 2
[,1] [,2] [,3]
[1,] 7 9 11
[2,] 8 10 12
- 屬性
> dim(z1)
[1] 2 3 2
> attributes(z1)
$dim
[1] 2 3 2
> attributes(y1)
$dim
[1] 2 3
$dimnames
$dimnames[[1]]
[1] "r1" "r2"
$dimnames[[2]]
[1] "c1" "c2" "c3"
- 元素訪問
> y1[2,]
c1 c2 c3
2 4 6
> y1[,1]
r1 r2
1 2
> y1[,2:3]
c2 c3
r1 3 5
r2 4 6
> y1[,c(2,3)]
c2 c3
r1 3 5
r2 4 6
> y1[,"c1"]
r1 r2
1 2
> y1["r1",]
c1 c2 c3
1 3 5
2.2 矩陣
> y2 <- matrix(data = 7:12,
+ nrow = 2,
+ ncol = 3,
+ dimnames = list(
+ c("r1", "r2"),
+ c("c1", "c2", "c3")
+ ))
> y2
c1 c2 c3
r1 7 9 11
r2 8 10 12
- 矩陣合并
rbind(): 按行合并
cbind(): 按列合并
行列的命名如果不同,默認(rèn)以第一個(gè)矩陣為準(zhǔn)
> rbind(y1, y2)
c1 c2 c3
r1 1 3 5
r2 2 4 6
r1 7 9 11
r2 8 10 12
> rbind(y2, y1)
c1 c2 c3
r1 7 9 11
r2 8 10 12
r1 1 3 5
r2 2 4 6
> cbind(y1, y2)
c1 c2 c3 c1 c2 c3
r1 1 3 5 7 9 11
r2 2 4 6 8 10 12
2.3 矩陣運(yùn)算
> y1 * y2 #注意不是向量乘
c1 c2 c3
r1 7 27 55
r2 16 40 72
> y1 + y2
c1 c2 c3
r1 8 12 16
r2 10 14 18
> y1 - y2
c1 c2 c3
r1 -6 -6 -6
r2 -6 -6 -6
> t(y1) #轉(zhuǎn)置
r1 r2
c1 1 2
c2 3 4
c3 5 6
> y1 ^ -1 #注意這樣不能求逆矩陣
c1 c2 c3
r1 1.0 0.33333333 0.20000000
r2 0.5 0.25000000 0.16666667
3 數(shù)據(jù)框
- 創(chuàng)建
> df = data.frame(id=1:4,
+ name=c("a", "b", "c", "d"),
+ score=c(60,70,80,90))
> df
id name score
1 1 a 60
2 2 b 70
3 3 c 80
4 4 d 90
- 命名
> rownames(df) #取行名
[1] "1" "2" "3" "4"
> rownames(df) <- 5:8
> df
id name score
5 1 a 60
6 2 b 70
7 3 c 80
8 4 d 90
> colnames(df) #取列名
[1] "id" "name" "score"
- 元素訪問
> df[c("5","6"),c("score","name")]
score name
5 60 a
6 70 b
> df$name #$符號快速選取一列
[1] a b c d
Levels: a b c d
> subset(df, score >= 80)
id name score
7 3 c 80
8 4 d 90
> subset(df, score >= 80, c(id,name))
id name
7 3 c
8 4 d