将具有因子级别的变量列添加到数据帧

时间:2015-06-18 16:23:39

标签: r string dataframe

我有两个嵌套因子的实验。例如,性别(1,2)和条件(1,2),如:

    factor A factor B
    male     cond.1
    male     cond.2
    female   cond.1
    female   cond.2

不幸的是,我用来导出因变量值的程序组合了标题中的因子级别,例如

    male_cond.1, male_cond.2, female_cond.1, female_cond.2
    456        , 5654       , 566          , 456
       ...           ...          ...            ...

这是不方便的,因为当我将数据帧融合到ANOVA适当的长格式中时,我不能再根据因子的不同级别来分离数据。它看起来像这样:

    1st column,    2nd column (DV)
    male_cond.1,   454
    male_cond.2,   5654
    female_cond.1, 566
    female_cond.2, 456

那么我怎样才能插入两个新的列,这些列的长度是多长,数据帧是重复我的因子的值?这两列应如下所示:

    1st column (gender), 2nd column (condition),  
    male,                cond.1               
    male,                cond.2          
    femal,               cond.1         
    female,              cond.2            
      ...                 ...

我自己的数据框有四个因素:电极(63)x soa(2)x stimulstype(3)x itemtype(2)。这就是我的原始数据框架:

    File Fp1.PD_ShortSOA_FAM Fp1.PD_LongSOA_FAM Fp1.PD_ShortSOA_SEMplus_REAL Fp1.PD_ShortSOA_SEMplus_FICT
    sub0001            0,446222          2,524,804            0,272959                    1,281,349
    sub0002           1,032,688          2,671,048           1,033,278                    1,217,817

然后这就是转置的样子:

    row.names                            V1         V2
    File                            sub0001    sub0002
    Fp1.PD_ShortSOA_FAM            0,446222  1,032,688
    Fp1.PD_LongSOA_FAM            2,524,804  2,671,048
    Fp1.PD_ShortSOA_SEMplus_REAL   0,272959  1,033,278
    Fp1.PD_ShortSOA_SEMplus_FICT  1,281,349  1,217,817
    Fp1.PD_ShortSOA_SEMminus_REAL  0,142739  1,405,100
    Fp1.PD_ShortSOA_SEMminus_FICT 1,515,577 -1,990,458

我希望我的因子列显示为:

    electrode, SOA, stimulustype, itemtype
    Fp1.    ShortSOA  FAM            
    Fp1.    LongSOA   FAM           
    Fp1.    ShortSOA  SEMplus       REAL   
     ...       ...     ...           ...

我尝试使用" strsplit"来自this post而且没有用。

1 个答案:

答案 0 :(得分:0)

融化让你几乎到了那里,你只需要将params["term" + index] = _.result(_.find(n.tags, function(term_id) { return term_id; }), 'term_id'); 列解析为单独的列。

variable

通过删除library(reshape2) d <- transform(melt(yourdf, id = NULL), gender = gsub("_.*$", "", variable), condition = gsub("^[^_]*_", "", variable)) d # variable value gender condition # 1 male_cond.1 456 male cond.1 # 2 male_cond.2 5654 male cond.2 # 3 female_cond.1 566 female cond.1 # 4 female_cond.2 456 female cond.2 之前的所有内容,通过删除_和因子B(条件)之后的所有内容,使用正则表达式替换来获取因子A(性别)。

如果您希望按特定顺序排列,请执行以下操作:

_