选取制定一列数据_R语言数据处理与分析入门 2(a brief tutorial)

334929f123419bb16c6632e524a7a430.png

在上一篇文章中,我介绍了R中简单的数据操作,以及循环、判断语句。此外还涉及到了一些简单的统计分析,这部分内容没有展开论述。

张光耀:R语言数据处理与分析入门(a brief tutorial)​zhuanlan.zhihu.com
1e9460668477188183abb08069bcbc50.png

在这一篇文章中,我仍然“以任务为导向”,在完成任务的过程中讲解如何在R中进行一般线性模型的分析。

有人会问为什么为什么不从t检验和方差分析开始讲?答曰:这两者都是线性模型的特例,理解了线性模型就能理解t检验和方差分析,与其“舍本逐末”,不如“追本溯源”。

下面步入正题:


任务2-1:用Schad等人(2020)编写的函数MixedDesign() (available from OSF)来模拟2*3设计的实验的数据。实验中,在距离屏幕中央左或右一段水平距离的某处呈现刺激,要求被试按键反应并记录被试的反应时,水平距离有三个水平(1个、2个或3个单位)(假设每名被试只做一次反应,即是一个被试间设计的实验)。每个条件下有30次观测值,各条件的均值(标准差都为30)如下:

90fb59aa527fcd49bd0cc67aff6be366.png

模拟数据:

df = mixedDesign(B = 6, n = 30, # B 表示 between-subject
                 M = matrix(c(250, 300, 350, 200, 300, 400),ncol = 1), SD = 30)

注意这里各条件的均值要以矩阵的形式输入,每一行表示一个被试内的因素,每一列表示一个被试间的因素。这里数据中的两个因素都是被试间,因此先按一个因素的设计来生成,即输入一个6行1列的矩阵。

生成的数据如下,第一列为条件,第二列为编号(1-180),第三列为因变量:

> head(df)
  B_A id       DV
1  A1  1 241.4539
2  A1  2 276.0513
3  A1  3 205.3806
4  A1  4 224.5472
5  A1  5 329.0166
6  A1  6 233.3297

下面对第一列变量进行重新编码,用两个变量(方向-direction,和 距离-distance)来表示。

这里涉及到以下几点:1.数据框内的子集选取;2.数据框中如何生成新变量;3.判断语句的迭代。对于最后一点,在excel中有常用到。

R中的子集选取运算符有三种:1. $;2. [];3.[[]]

对于数据框,第一种运算符的功能是选取某一列,并以一维数组的形式返回:

> head(df$DV)
[1] 241.4539 276.0513 205.3806 224.5472 329.0166 233.3297
> is.vector(df$DV)
[1] TRUE

第二种运算符的功能有多种,一个是选取列,并以数据框的形式返回:

> head(df[1:2])
  B_A id
1  A1  1
2  A1  2
3  A1  3
4  A1  4
5  A1  5
6  A1  6
> is.data.frame(df[1:2])
[1] TRUE

也可以根据列名返回 (返回结果仍为数据框):

> head(df[c('DV','id')])
        DV id
1 241.4539  1
2 276.0513  2
3 205.3806  3
4 224.5472  4
5 329.0166  5
6 233.3297  6
> is.data.frame(df[c('DV','id')])
[1] TRUE

但不能返回不存在的列:

> head(df[c('XX')])
Error in `[.data.frame`(df, c("XX")) : undefined columns selected

二是可以输入坐标(格式为[行坐标,列坐标])返回,返回结果仍为数据框,比如返回第2到第10行:

> df[1:10, ]
   B_A id       DV
1   A1  1 241.4539
2   A1  2 276.0513
3   A1  3 205.3806
4   A1  4 224.5472
5   A1  5 329.0166
6   A1  6 233.3297
7   A1  7 298.4980
8   A1  8 264.9493
9   A1  9 263.0668
10  A1 10 244.2183

返回第1列和第3列的第1、3、5、7、9行:

> df[c(1,3,5,7,9), c(1,3)]
  B_A       DV
1  A1 241.4539
3  A1 205.3806
5  A1 329.0166
7  A1 298.4980
9  A1 263.0668

第三种运算符只能选取某一列,返回结果为一维数组:

> df[[1]] # 返回第一列
  [1] A1 A1 A1 A1 A1 A1 A1 A1 A1 A1 A1 A1 A1 A1 A1 A1 A1 A1 A1 A1 A1 A1 A1 A1 A1
 [26] A1 A1 A1 A1 A1 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2
 [51] A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3
 [76] A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A4 A4 A4 A4 A4 A4 A4 A4 A4 A4
[101] A4 A4 A4 A4 A4 A4 A4 A4 A4 A4 A4 A4 A4 A4 A4 A4 A4 A4 A4 A4 A5 A5 A5 A5 A5
[126] A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5
[151] A6 A6 A6 A6 A6 A6 A6 A6 A6 A6 A6 A6 A6 A6 A6 A6 A6 A6 A6 A6 A6 A6 A6 A6 A6
[176] A6 A6 A6 A6 A6
Levels: A1 A2 A3 A4 A5 A6
> is.data.frame(df[[1]])
[1] FALSE

也可以按列名返回:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值