R语言基础

一、R语言环境安装

官方网站(英文):The R Project for Statistical Computing

Download 地址:CRAN – Mirrors

安装完成图:

二、安装RStudio

下载地址:Download RStudio

根据自己的操作系统选择下载:

安装完成:

三、R语言的数据结构

R语言主要的基础数据结构:向量、矩阵、数组、数据框、列表、因子

1、向量: 存储相同数据类型的容器

使用c()函数创建一个向量

如果其中一个元素是字符,则非字符值被强制转换为字符类型

> name <- c('猴子','李四','王五','张三');

用length()函数来查看向量的长度

> length(name)
[1] 4

R语言的向量通过 中括号+数字索引 来访问向量里面的内容(R语言的向量索引从1开始)

> name[1]
[1] "猴子"

多元素向量(通过冒号来生成1-10的数字):

> n <- 1:10
> print(n)
 [1]  1  2  3  4  5  6  7  8  9 10

实用seq来创建序列

> s <- seq(1, 10, by =2)
> print(s)
[1] 1 3 5 7 9

2、矩阵(matrix),矩阵是二维矩形数据集

矩阵类型,就像excel一样由行和列组成。并通过行列索引来组织元素。矩阵被限制为二维,所以一般用来处理表格类的数据。多维的数据用数组来处理。

语法: matrix(data, nrow, ncol, byrow, dimnames)

参数的说明 –

  • 数据是成为矩阵的数据元素的输入向量。
  • nrow是要创建的行数。
  • ncol是要创建的列数。
  • byrow是一个逻辑线索。 如果为TRUE,则输入向量元素按行排列。
  • dimname是分配给行和列的名称。

创建一个matrix:

> data <- c(1,2,3,4,5,6); # 矩阵的输入数据
> 
> rnames <- c("r1", "r2"); #行名
> 
> cnames <- c("c1","c2","c3") #列名
> 
> m <- matrix(data = data, #指定数据输入
+             nrow=2, ncol = 3, #2行3列
+             byrow=TRUE, #按行排序
+             dimnames = list(rnames,cnames))
> m
   c1 c2 c3
r1  1  2  3
r2  4  5  6
> 

访问矩阵的元素:

可以通过使用元素的列和行索引来访问矩阵的元素。(我对索引的理解是:数据元素的坐标)

> row1 <- m[1,] #查看第一行
> row1
c1 c2 c3 
 1  2  3 
> col1 <- m[,1] #查看第一列的数据
> col1
r1 r2 
 1  4 
> d <- m[2,3] # 查看第2行第3列的数据
> d
[1] 6

用矩阵生成图表:

> ages <- c(20,30,33,43); #年龄数据
> rnames = c('张三','李四','王五','赵六'); #行名
> cnames = c('age'); #列名
> 
> table = matrix(data = ages,
+                nrow = 4, ncol = 1,
+                byrow=TRUE,
+                dimnames = list(rnames,c_age));
> table
     age
张三  20
李四  30
王五  33
赵六  43
####创建图表#####
barplot(table[,"age"],
        main="年龄分布",
        ylab="姓名",
        col=c("blue"),
        border=NA,
        cex.lab=1.5,
        las=2)

三、数组

数组的数据可以有多个维度。可以存储同一种类型的数据。

语法:

array(vector, # 数组的元素

dimensions, #各维度元素的个数

dimnames) #各个维度的名称

> data <- 1:24;
> dim1 <- c("A1", "A2");
> dim2 <- c("B1", "B2", "B3");
> dim3 <- c("C1", "C2" ,"C3", "C4");
> 
> result <- array(data,
+                c(2,3,4),
+                dimnames  = list(dim1, dim2, dim3)
+                );
> result
, , C1

   B1 B2 B3
A1  1  3  5
A2  2  4  6

, , C2

   B1 B2 B3
A1  7  9 11
A2  8 10 12

, , C3

   B1 B2 B3
A1 13 15 17
A2 14 16 18

, , C4

   B1 B2 B3
A1 19 21 23
A2 20 22 24

数组的访问:

> result[1,1,2]
[1] 7
> result[1,,2]
B1 B2 B3 
 7  9 11 

跨数组元素的计算(apply()):

语法: apply(x, margin, fun)

  • x是一个数组。
  • margin是所使用的数据集的名称。
  • fun是要应用于数组元素的函数。
# Create two vectors of different lengths.
vector1 <- c(5,9,3)
vector2 <- c(10,11,12,13,14,15)

# Take these vectors as input to the array.
new.array <- array(c(vector1,vector2),dim = c(3,3,2))
print(new.array)
, , 1

     [,1] [,2] [,3]
[1,]    5   10   13
[2,]    9   11   14
[3,]    3   12   15

, , 2

     [,1] [,2] [,3]
[1,]    5   10   13
[2,]    9   11   14
[3,]    3   12   15
# Use apply to calculate the sum of the rows across all the matrices.
result <- apply(new.array, c(1), sum)
print(result)
[1] 56 68 60

四、Data Frames

DataFrame是表格数据对象。和矩阵不同的是,每列都可以包含不同的数据类型。

语法: data.frame(col1,col2,col3,…);

#病人编号
ID <- c(1,2,3,4);
#姓名
name <- c('张三','李四','王五','赵六');
#病人年龄
age <- c(29,32,28,55);
#糖尿病的类型
diabetes <- c("1型糖尿病","2型糖尿病","1型糖尿病","2型糖尿病");
#病情
status <- c("较差","好转","显著好转","较差");

frameData <- data.frame(ID,
                        name,
                        age,
                        diabetes,
                        status,
                        stringsAsFactors = FALSE);
> frameData
  ID name age  diabetes   status
1  1 张三  29 1型糖尿病     较差
2  2 李四  32 2型糖尿病     好转
3  3 王五  28 1型糖尿病 显著好转
4  4 赵六  55 2型糖尿病     较差

查找DataFrame中的数据:

[行,列] 查询相应的行和列

[列:列] 查询相应的列数据

> age1 <- frameData$age  #查找一列数据
> age1
[1] 29 32 28 55

> frameData[1,] #访问第一行
  ID name age  diabetes status
1  1 张三  29 1型糖尿病   较差

> frameData[,2] #访问第二列
[1] "张三" "李四" "王五" "赵六"

> frameData[1:2]  #访问第1和第2列
  ID name
1  1 张三
2  2 李四
3  3 王五
4  4 赵六

> frameData[c("ID","name")] #同上面一样,访问ID和name列
  ID name
1  1 张三
2  2 李四
3  3 王五
4  4 赵六

患有“1型糖尿病”的人有那些?

a <- frameData[frameData$diabetes == "1型糖尿病",]  #注意中括号里 是 “逗号”

  ID name age  diabetes   status
1  1 张三  29 1型糖尿病     较差
3  3 王五  28 1型糖尿病 显著好转

患有“1型糖尿病”的有多少人?

> a.number <- nrow(a)  #nrow 计算行的个数
> a.number
[1] 2

添加行数据:

#编号
ID <- c(5);
#年龄
age <- c(38);
#姓名
name = c("刘德华")
#糖尿病类型
diabetes <- c("1型糖尿病");
#病情
status <- c("较差");

new <- data.frame(ID,name,age,
                  diabetes,status,
                  stringsAsFactors = FALSE);
newData <- rbind(frameData,new); #通过 rbind() 函数来添加行数据

> newData
  ID   name age  diabetes   status
1  1   张三  29 1型糖尿病     较差
2  2   李四  32 2型糖尿病     好转
3  3   王五  28 1型糖尿病 显著好转
4  4   赵六  55 2型糖尿病     较差
5  5 刘德华  38 1型糖尿病     较差

添加列数据:

#入院时间
inTime <- c("2017-3-1","2017-4-1","2017-5-5",
            "2017-6-20","2017-8-30");
newData <- cbind(newData, inTime); # 通过cbind()函数添加列

> newData
  ID   name age  diabetes   status    inTime
1  1   张三  29 1型糖尿病     较差  2017-3-1
2  2   李四  32 2型糖尿病     好转  2017-4-1
3  3   王五  28 1型糖尿病 显著好转  2017-5-5
4  4   赵六  55 2型糖尿病     较差 2017-6-20
5  5 刘德华  38 1型糖尿病     较差 2017-8-30

五、列表

列表可以包含不同类型的元素,如数字,字符串,向量和其中的另一个列表。

列表还可以包含矩阵或函数作为其元素。

列表是使用list()函数创建的。

语法:

list(name1=object1,

name2=object2,

name3=object3,…);

type1 = newData[newData$diabetes == "1型糖尿病",];
type1Count <- nrow(type1)
type1Data <- list(diabetesType1=type1,
                  count=type1Count)  #汇总“1型糖尿病”的信息

> type1Data
$diabetesType1
  ID   name age  diabetes   status    inTime
1  1   张三  29 1型糖尿病     较差  2017-3-1
3  3   王五  28 1型糖尿病 显著好转  2017-5-5
5  5 刘德华  38 1型糖尿病     较差 2017-8-30

$count
[1] 3

list的查找

> type1Data[["count"]]  #这里列表中元素的名字是用中括号括起来的
[1] 3

> type1Data$count #$符也可以访问
[1] 3

> type1Data[2] #通过索引也可以方位列表中的元素
$count
[1] 3

六、因子

因子是用于对数据进行分类并将其存储为级别的数据对象。 它们可以存储字符串和整数。 它们在具有有限数量的唯一值的列中很有用。 像“男性”,“女性”和True,False等。它们在统计建模的数据分析中很有用。

使用factor()函数通过将向量作为输入创建因子。

data <- c("male","female")
factorData <- factor(data)

> factorData
[1] male   female
Levels: female male

更改因子级别(levels)顺序

> newFactor <- factor(factorData,levels = c("male","female"))
> newFactor
[1] male   female
Levels: male female

生成因子制定levels

> v <- gl(3, 4, labels = c("Tampa", "Seattle","Boston"))
> print(v)

 [1] Tampa   Tampa   Tampa   Tampa   Seattle Seattle Seattle
 [8] Seattle Boston  Boston  Boston  Boston 
Levels: Tampa Seattle Boston

总结:R语言的基础数据结构,大致分两种:

一种是存储相同类型的元素–向量、数组、矩阵。

另一种可以存储不同类型的元素–DataFrame、list。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>