R语言基础2

文章介绍了R语言中数组的创建和操作,包括array函数的使用,以及通过dim和dimnames设置维度名称。同时,解释了数据框(data.frame)的概念,作为存储不同类型数据的结构,并展示了如何通过data.frame()创建数据框。此外,讨论了如何选取数组和数据框中的元素,以及使用attach()、detach()和with()函数简化代码的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3 数组

数组类似于矩阵,其维度可以大于2.数组可以通过array函数创建,形式如下:

> setarray <- array(vector,dimensions,dimnames)

其中,vector包含了数组中的数据;dimensions是一个数值型向量,给出了各维度下标的最大值;而dimensions是可选的、各维度名称标签的列表。

举个例子:

> dim1 <- c("x1","x2")
> dim2 <- c("y1","y2","y3")
> dim3 <- c("z1","z2","z3","z4")
> xyz <- array(1:24,c(4,3,2),dimnames=list(dim3,dim2,dim1))
> xyz
, , x1

   y1 y2 y3
z1  1  5  9
z2  2  6 10
z3  3  7 11
z4  4  8 12

, , x2

   y1 y2 y3
z1 13 17 21
z2 14 18 22
z3 15 19 23
z4 16 20 24

从数组中选取元素的方法与矩阵相同 例:

> xyz[1,2,]            //取x1,x2两个维度下y2  z1下的元素
x1 x2 
 5 17 
> xyz[1,3,]
x1 x2 
 9 21 
> xyz[,2,2]
z1 z2 z3 z4 
17 18 19 20 
> xyz[3,2,1]
[1] 7

4 数据框

我们知道矩阵只能够存入相同模式的数据。而当我们想要存储不同模式的数据时就需要使用到我们的数据框。数据框可以通过函数data。frame()创建:

格式如下:

mydata <- data.frame(col1,col2,col3,……)
//其中的列向量col1,col2……可以为任何类型

举个例子:

> IDnumber <- c(101,102,103,104)
> age <- c(24,78,56,45)
> hypertention <- c("yes","no","no","yes")
> severity <- c("high","middle","low","middle")
> patientdata <- data.frame(IDnumber,age,hypertention,severity)
> patientdata
  IDnumber age hypertention severity
1      101  24          yes     high
2      102  78           no   middle
3      103  56           no      low
4      104  45          yes   middle

选取数据框中的元素有很多种,例如下:

> patientdata[1]       //引用数据框中的第一列
  IDnumber
1      101
2      102
3      103
4      104
> patientdata["age"]   //引用age列
  age
1  24
2  78
3  56
4  45
> patientdata[1:2]     //引用第一列到第二列
  IDnumber age
1      101  24
2      102  78
3      103  56
4      104  45
> patientdata[c("age","severity")]       //引用age列和severity列
  age severity
1  24     high
2  78   middle
3  56      low
4  45   middle
> patientdata$age            //利用$符号来引用数据框中的元素
[1] 24 78 56 45
//"$"符号是新出现的使用方法,它被用来选取一个给定数据框中的某个特定变量。

在引用数据框中的某些元素时,每次引入都需要输入数据框的名称会令人生厌。我们可以联合使用函数attach()和detach(),或者单独使用函数with()来简化代码。

(1)attach() 可以姜数据框添加到R的搜索路径中。当R遇到一个变量名以后,将检查搜索路径中的数据框,以定位到这个变量。

//使用以下代码获取年龄(age)变量的描述性统计量,并分别绘制此变量与收缩压的散点图。
> systolic <- c(120,130,140,150,160)
> age <- c(20,30,40,50,55)
> hypertension <- data.frame(systolic,age)
> hypertension
  systolic age
1      120  20
2      130  30
3      140  40
4      150  50
5      160  55
> summary(hypertension$age)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
     20      30      40      39      50      55 
> summary(hypertension$systolic)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    120     130     140     140     150     160 
> plot(hypertension$systolic,hypertension$age)
> attach(hypertension)
The following objects are masked _by_ .GlobalEnv:        //显示搜索路径中已经存在hypertension这一数据框

    age, systolic

> summary(age)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
     20      30      40      39      50      55 
> summary(systolic)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    120     130     140     140     150     160 
> plot(systolic,age)
> detach(hypertension)   //detach()用于将数据框从搜索路径中移除。detach并不会对数据框本身作任何处理,这句话是可以省略的。

当名称相同的对象不止一个时,这种方法就会显现出它的局限性,原始对象将有限进行运算。函数attach()和detach()最好在分析一个单独的数据框时使用,并且不太可能有多规格同名对象时使用。

(2)with()函数

使用with()函数,也可以实现上述实例:

>with (hypertension,{
+ summary(age) 
+ summary(systolic) 
+ plot(systolic,age)
})                    //此格式不能不能更改,否则报错


//错误格式:
> with (hypertension,{summary(age) summary(systolic) plot(systolic,age)})
错误: unexpected symbol在"with (hypertension,{summary(age) summary"里

注意:

大括号{}之间的语句都针对数据框hypertension执行,这样就不用翻新名称冲突了。如果只有一条语句,大括号可以省略。函数with()的局限性在于赋值仅在此函数的括号内生效。

代码如下:

>with (hypertension,{stat <- summary(age)
+ stat})
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
     20      30      40      39      50      55 
> stat
错误: 找不到对象'stat'

如果想要实现创建在with()结果外的对象,需要使用特殊赋值符号"<<-"代替标准赋值符号"<-",它可以将对象保存到with()之外的全局环境中。

举个例子:

> with(hypertension,{nonstat <- summary(systolic)
+ stat <<-summary(systolic)
+ })
> nonstat
错误: 找不到对象'nonstat'
> stat
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    120     130     140     140     150     160 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jqh.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值