无法从R中的data.frame索引数字向量

时间:2015-04-17 14:18:23

标签: r dataframe

我已经好几次了,但是因为我使用R已经有一段时间了,显然我错过了一些东西。

我有一个名为Mean_A_trial_long的长格式data.frame,其格式如下:

> head(Mean_A_trial_long,30)
   Trial TrialType  Block variable     value
1    101    Opaque Block2       RT  961.6000
2    102    Opaque Block2       RT  713.5000
3    103    Opaque Block2       RT  714.4444
4    104    Opaque Block2       RT  757.8750
5    105    Opaque Block2       RT  992.8000
6    106    Opaque Block2       RT 1114.7000
7    107    Opaque Block2       RT  770.6250
8    108    Opaque Block2       RT  835.5714
9    109    Opaque Block2       RT  693.6667
10   110    Opaque Block2       RT  816.5714
11   111    Opaque Block2       RT  748.2000
12   112    Opaque Block2       RT  789.3333
13   113    Opaque Block2       RT  848.8000
14   114    Opaque Block2       RT  883.3077
15   115    Opaque Block2       RT  933.8333
16   116    Opaque Block2       RT  879.2000
17   117    Opaque Block2       RT  802.5000
18   118    Opaque Block2       RT  899.8750
19   119    Opaque Block2       RT  821.2000
20   120    Opaque Block2       RT  820.1250
21   121    Opaque Block2       RT  755.6250
22   122    Opaque Block2       RT  900.1667
23   123    Opaque Block2       RT  840.5556
24   124    Opaque Block2       RT  755.4000
25   125    Opaque Block2       RT  657.4000
26   126    Opaque Block2       RT 1112.1429
27   127    Opaque Block2       RT  972.6667
28   128    Opaque Block2       RT  765.1667
29   129    Opaque Block2       RT  959.0000
30   130    Opaque Block2       RT  844.1429

至关重要的是,TrialType是一个有两个级别的因素:OpaqueTransparent。对于这两个级别中的每个级别,trial列中有两个相同编号的实例。因此,trial列中的Opaque列为TrialTypeTransparentTrialType,然后Opaque中的Transparent再次从101变为200。它一直到试用500为止。

我想要做的是提取两个载体,每个载体有10个试验,一个对应于First10Transparent <- Mean_A_trial_long$value[Mean_A_trial_long$TrialType == "Transparent" & (Mean_A_trial_long$Trial > 100 & Mean_A_trial_long$trial < 111)] 条件的前10个试验,一个对应{{1}}条件的前10个试验。

这就是我的尝试:

{{1}}

但这给了我一个名为First10Transparent的空对象,上面没有任何内容......

非常感谢任何关于我遗失/做错的线索。

3 个答案:

答案 0 :(得分:2)

嗯,这很令人尴尬......而且还会告诉你细节的重要性。

错误的是,在索引Trial列时,我第一次使用大写字母T(corect)编写,但第二次写入小写字母t(错误)。这就是我得到一个空对象的原因。

在两条线上将试验改为大写T给了我理想的结果:

First10Transparent <- Mean_A_trial_long$value[Mean_A_trial_long$TrialType == "Transparent" &     (Mean_A_trial_long$Trial > 100 & Mean_A_trial_long$Trial < 111)]
> First10Transparent
[1]  887.8889  797.1000  742.8000  660.1667  892.5556 1165.5000  644.8333  650.5714  681.1250  756.8571

答案 1 :(得分:1)

使用with()

Mean_A_trial_long$value[with(Mean_A_trial_long,TrialType == "Opaque" & Trial > 100 & Trial < 111)]
Mean_A_trial_long$value[with(Mean_A_trial_long,TrialType == "Transparent" & Trial > 200 & Trial < 211)]

我已修改您的代码以包含with()语句。 With有几个优点,因为:

  • 只需要您输入一次数据名称
  • 降低编码错误的可能性
  • 简化您的代码

使用您的代码

您还可以使用原始代码创建此声明:

Mean_A_trial_long$value[Mean_A_trial_long$TrialType == "Transparent" & (Mean_A_trial_long$Trial > 100 & Mean_A_trial_long$trial < 111)]

答案 2 :(得分:0)

这将为您提供所需的子集。

 First10Transparent <- Mean_A_trial_long[as.character(Mean_A_trial_long$TrialType) == "Transparent" & (Mean_A_trial_long$Trial > 100 & Mean_A_trial_long$trial < 111),]