程序员

学习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"
上一篇 下一篇

猜你喜欢

热点阅读