学习R语言(一)
2018-06-12 本文已影响71人
WilliamY
装好R后进入R环境:
sudo R
0.安装
sudo apt-get update
sudo apt-get install r-base
1.向量
R语言没有标量,只有向量。如数字1,R中存储为c(1)
赋值
> a <- c(1,2,3)
> a
[1] 1 2 3
筛选
R语言下标从1开始,结束的下标包含在筛选范围内。注意,只写一个:
不能选择全部元素。这和python不同。
> a[1:2]
[1] 1 2
条件筛选也是可以的:
> a[a>2]
[1] 3
条件判断是逐个进行(element-wise)的:
> a > 2
[1] FALSE FALSE TRUE
合并
c()
可以合并向量。
> c(a[1], 5, a[2], a[3], 6:10)
[1] 1 5 2 3 6 7 8 9 10
(循环)补齐
两个向量运算,长度不同时,较短的一个自动补齐到较长的向量的长度,方式是从较短向量的开头依次填补。若仍不够长,则循环上述过程。
> a <- c(30, 40)
> b <- c(1:10)
> a + b
[1] 31 42 33 44 35 46 37 48 39 50
2.矩阵
赋值
> a <- matrix(c(1:8), nrow=2)
> a
[,1] [,2] [,3] [,4]
[1,] 1 3 5 7
[2,] 2 4 6 8
如果想要按行排列元素,则可以设置byrow=TRUE
(注意true全部是大写):
> a <- matrix(c(1:8), nrow=2, byrow=TRUE)
> a
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
筛选
用行号和列号筛选。注意用的是中括号,和python是一样的。
> a[1:2, 3:4]
[,1] [,2]
[1,] 3 4
[2,] 7 8
如果要选择某一整行(列),就空着列(行)号。
> a <- matrix(1:4, nrow=2)
> a
[,1] [,2]
[1,] 1 3
[2,] 2 4
> a[2, ]
[1] 2 4
> a[, 1]
[1] 1 2
线性代数
如果不加是区别的*
号,表示的是元素乘。
> a * a
[,1] [,2] [,3] [,4]
[1,] 1 4 9 16
[2,] 25 36 49 64
如果要表示矩阵乘法,则需用%*%
来表示
> b <- t(a)
> a %*% b
[,1] [,2]
[1,] 30 70
[2,] 70 174
这里t()
表示矩阵的转置。
要表示逆,则用solve()
。
> d = matrix(1:4, nrow=2)
> solve(d)
[,1] [,2]
[1,] -2 1.5
[2,] 1 -0.5
> d %*% solve(d)
[,1] [,2]
[1,] 1 0
[2,] 0 1
3.数据框
数据框类似于矩阵,但数据框可以包含多种数据类型。【我个人感觉dataframe翻译成数据框很奇怪。约定俗成吧。】
> data('iris')
> head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
> summary(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
Median :5.800 Median :3.000 Median :4.350 Median :1.300
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
Species
setosa :50
versicolor:50
virginica :50
> names(iris)
[1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
data()
函数调入数据集。这里不需要赋值给任何变量。
head()
可以查看前几行。
summary()
可以查看表格各列的统计值。
names()
可以获取列名。
筛选
可以通过行列号,也可以通过列名,来筛选元素。也可以混合使用。
> iris$Species
[1] setosa setosa setosa setosa setosa setosa
[7] setosa setosa setosa setosa setosa setosa
[13] setosa setosa setosa setosa setosa setosa
[19] setosa setosa setosa setosa setosa setosa
[25] setosa setosa setosa setosa setosa setosa
[31] setosa setosa setosa setosa setosa setosa
[37] setosa setosa setosa setosa setosa setosa
[43] setosa setosa setosa setosa setosa setosa
[49] setosa setosa versicolor versicolor versicolor versicolor
[55] versicolor versicolor versicolor versicolor versicolor versicolor
[61] versicolor versicolor versicolor versicolor versicolor versicolor
[67] versicolor versicolor versicolor versicolor versicolor versicolor
[73] versicolor versicolor versicolor versicolor versicolor versicolor
[79] versicolor versicolor versicolor versicolor versicolor versicolor
[85] versicolor versicolor versicolor versicolor versicolor versicolor
[91] versicolor versicolor versicolor versicolor versicolor versicolor
[97] versicolor versicolor versicolor versicolor virginica virginica
[103] virginica virginica virginica virginica virginica virginica
[109] virginica virginica virginica virginica virginica virginica
[115] virginica virginica virginica virginica virginica virginica
[121] virginica virginica virginica virginica virginica virginica
[127] virginica virginica virginica virginica virginica virginica
[133] virginica virginica virginica virginica virginica virginica
[139] virginica virginica virginica virginica virginica virginica
[145] virginica virginica virginica virginica virginica virginica
Levels: setosa versicolor virginica
> iris[20, ]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
20 5.1 3.8 1.5 0.3 setosa
> iris[3, ]$Species
[1] setosa
Levels: setosa versicolor virginica
> iris$Patal.Length
NULL
> iris$Petal.Length
[1] 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 1.5 1.6 1.4 1.1 1.2 1.5 1.3 1.4
[19] 1.7 1.5 1.7 1.5 1.0 1.7 1.9 1.6 1.6 1.5 1.4 1.6 1.6 1.5 1.5 1.4 1.5 1.2
[37] 1.3 1.4 1.3 1.5 1.3 1.3 1.3 1.6 1.9 1.4 1.6 1.4 1.5 1.4 4.7 4.5 4.9 4.0
[55] 4.6 4.5 4.7 3.3 4.6 3.9 3.5 4.2 4.0 4.7 3.6 4.4 4.5 4.1 4.5 3.9 4.8 4.0
[73] 4.9 4.7 4.3 4.4 4.8 5.0 4.5 3.5 3.8 3.7 3.9 5.1 4.5 4.5 4.7 4.4 4.1 4.0
[91] 4.4 4.6 4.0 3.3 4.2 4.2 4.2 4.3 3.0 4.1 6.0 5.1 5.9 5.6 5.8 6.6 4.5 6.3
[109] 5.8 6.1 5.1 5.3 5.5 5.0 5.1 5.3 5.5 6.7 6.9 5.0 5.7 4.9 6.7 4.9 5.7 6.0
[127] 4.8 4.9 5.6 5.8 6.1 6.4 5.6 5.1 5.6 6.1 5.6 5.5 4.8 5.4 5.6 5.1 5.1 5.9
[145] 5.7 5.2 5.0 5.2 5.4 5.1
> iris$Petal.Length[20, ]
Error in iris$Petal.Length[20, ] : incorrect number of dimensions
> iris$Petal.Length[20]
[1] 1.5
还可以用[[num]]
表示第num个属性
> iris[[2]]
[1] 3.5 3.0 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 3.7 3.4 3.0 3.0 4.0 4.4 3.9 3.5
[19] 3.8 3.8 3.4 3.7 3.6 3.3 3.4 3.0 3.4 3.5 3.4 3.2 3.1 3.4 4.1 4.2 3.1 3.2
[37] 3.5 3.6 3.0 3.4 3.5 2.3 3.2 3.5 3.8 3.0 3.8 3.2 3.7 3.3 3.2 3.2 3.1 2.3
[55] 2.8 2.8 3.3 2.4 2.9 2.7 2.0 3.0 2.2 2.9 2.9 3.1 3.0 2.7 2.2 2.5 3.2 2.8
[73] 2.5 2.8 2.9 3.0 2.8 3.0 2.9 2.6 2.4 2.4 2.7 2.7 3.0 3.4 3.1 2.3 3.0 2.5
[91] 2.6 3.0 2.6 2.3 2.7 3.0 2.9 2.9 2.5 2.8 3.3 2.7 3.0 2.9 3.0 3.0 2.5 2.9
[109] 2.5 3.6 3.2 2.7 3.0 2.5 2.8 3.2 3.0 3.8 2.6 2.2 3.2 2.8 2.8 2.7 3.3 3.2
[127] 2.8 3.0 2.8 3.0 2.8 3.8 2.8 2.8 2.6 3.0 3.4 3.1 3.0 3.1 3.1 3.1 2.7 3.2
[145] 3.3 3.0 2.5 3.0 3.4 3.0
也可以进行有条件筛选。
> iris[iris$Petal.Length>6., ]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
106 7.6 3.0 6.6 2.1 virginica
108 7.3 2.9 6.3 1.8 virginica
110 7.2 3.6 6.1 2.5 virginica
118 7.7 3.8 6.7 2.2 virginica
119 7.7 2.6 6.9 2.3 virginica
123 7.7 2.8 6.7 2.0 virginica
131 7.4 2.8 6.1 1.9 virginica
132 7.9 3.8 6.4 2.0 virginica
136 7.7 3.0 6.1 2.3 virginica
注意逗号不可以省掉。
排序
order()
函数排序。如:
> head(iris[order(iris[[3]]), ])
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
23 4.6 3.6 1.0 0.2 setosa
14 4.3 3.0 1.1 0.1 setosa
15 5.8 4.0 1.2 0.2 setosa
36 5.0 3.2 1.2 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
17 5.4 3.9 1.3 0.4 setosa
> head(iris[order(iris[,2]), ])
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
61 5.0 2.0 3.5 1.0 versicolor
63 6.0 2.2 4.0 1.0 versicolor
69 6.2 2.2 4.5 1.5 versicolor
120 6.0 2.2 5.0 1.5 virginica
42 4.5 2.3 1.3 0.3 setosa
54 5.5 2.3 4.0 1.3 versicolor
根据第2列排序后,输出第1,3列:
> head(iris[order(iris[,2]), ][, c(1, 3)])
Sepal.Length Petal.Length
61 5.0 3.5
63 6.0 4.0
69 6.2 4.5
120 6.0 5.0
42 4.5 1.3
54 5.5 4.0
4.列表
> l <- list(name='helloworld', ohmygod=2, youaregoodgood=TRUE)
> l
$name
[1] "helloworld"
$ohmygod
[1] 2
$youaregoodgood
[1] TRUE
里面的属性随便填。
筛选和数据框一样。
> l$youaregoodgood
[1] TRUE
> l[[3]]
[1] TRUE
> l[[1]]
[1] "helloworld"