【问题标题】:subtracting a specific condition for each measure为每个度量减去特定条件
【发布时间】:2013-07-01 02:12:00
【问题描述】:

我有一个如下所示的数据框,它一直持续到主题 22 Beta 是相关度量。

Subject ROI Block Condition Beta
1   motor1  1   nopred_noom -2.8653
1   motor1  1   pred_noom   -2.9126
1   motor1  1   nopred_om   -2.8688
1   motor1  1   pred_om -2.9098
1   motor1  1   null    -2.7717
1   motor1  2   nopred_noom -2.2382
1   motor1  2   pred_noom   -2.0583
1   motor1  2   nopred_om   -2.2207
1   motor1  2   pred_om -2.1928
1   motor1  2   null    -2.1166
1   motor1  3   nopred_noom -1.5992
1   motor1  3   pred_noom   -1.5493
1   motor1  3   nopred_om   -1.5230
1   motor1  3   pred_om -1.4851
1   motor1  3   null    -1.5624
2   motor1  1   nopred_noom -1.1354
2   motor1  1   pred_noom   -1.1614
2   motor1  1   nopred_om   -1.2779
2   motor1  1   pred_om -1.1234
2   motor1  1   null    -1.2203
2   motor1  2   nopred_noom -1.5728
2   motor1  2   pred_noom   -1.6614
2   motor1  2   nopred_om   -1.7076
2   motor1  2   pred_om -1.7702
2   motor1  2   null    -1.4170

有 5 个条件,但我想使用条件 null 作为基线,并想从每个对应的块和主题中的其他条件中减去它。

所以我会从subject1,block 1中的其他条件中的Beta度量中减去subject 1,block 1,条件“null”中的Beta,但是我想使用subject1,block2中的beta值“null”作为主题1中的度量, block2 等等。

null 条件每 5 个条件发生一次,我怀疑我需要使用循环,但我对 R 很陌生,我不知道该怎么做。

感谢任何帮助!!! 谢谢:)

【问题讨论】:

    标签: r subtraction baseline


    【解决方案1】:

    这需要所谓的“split-apply-combine”方法。有很多可能性可以做到这一点。对于初学者来说最简单的是包 plyr,因为它的语法很好。

    library(plyr)
    DF <- ddply(DF, .(Subject,ROI,Block), transform, Beta0 = Beta-Beta[Condition=="null"])
    
    #    Subject    ROI Block   Condition    Beta   Beta0
    # 1        1 motor1     1 nopred_noom -2.8653 -0.0936
    # 2        1 motor1     1   pred_noom -2.9126 -0.1409
    # 3        1 motor1     1   nopred_om -2.8688 -0.0971
    # 4        1 motor1     1     pred_om -2.9098 -0.1381
    # 5        1 motor1     1        null -2.7717  0.0000
    # 6        1 motor1     2 nopred_noom -2.2382 -0.1216
    # 7        1 motor1     2   pred_noom -2.0583  0.0583
    # 8        1 motor1     2   nopred_om -2.2207 -0.1041
    # 9        1 motor1     2     pred_om -2.1928 -0.0762
    # 10       1 motor1     2        null -2.1166  0.0000
    # <snip>
    

    【讨论】:

      【解决方案2】:

      这是上述任务的基本 R 代码:

      #-- split
      dfs <- split(df, list(df$Block, df$Subject))
      #-- apply
      Beta0<-NULL
      for (i in 1:length(dfs))
      {Beta0 <- dfs[[i]]$Beta - dfs[[i]][dfs[[i]]$Condition=="null",]$Beta;
       dfs[[i]][,"Beta0"] <- Beta0}
      #-- recombine
      dfrc <- do.call(rbind, dfs)
      

      df=原始数据框; dfs = 包含所有拆分子组的列表; dfrc = 新数据框,它应该为新列“Beta0”重现上面显示的结果。

      我发布此信息是因为我有一个类似的数据集 - 类似地 - 一个块中条件“null”的“Beta”缺失值。 Plyr 产生了一条错误消息“参数暗示不同的行数:x,0”并且没有计算。然而,上面的代码为该块生成了 NA,但计算了所有其余部分。

      【讨论】:

        【解决方案3】:

        进入data.table 也很有趣。或者,也许我只是在踢 DT……

        +1 表示有数据的可回答问题。

        df <- read.table(text ='Subject ROI Block Condition Beta
        1   motor1  1   nopred_noom -2.8653
        1   motor1  1   pred_noom   -2.9126
        1   motor1  1   nopred_om   -2.8688
        1   motor1  1   pred_om -2.9098
        1   motor1  1   null    -2.7717
        1   motor1  2   nopred_noom -2.2382
        1   motor1  2   pred_noom   -2.0583
        1   motor1  2   nopred_om   -2.2207
        1   motor1  2   pred_om -2.1928
        1   motor1  2   null    -2.1166
        1   motor1  3   nopred_noom -1.5992
        1   motor1  3   pred_noom   -1.5493
        1   motor1  3   nopred_om   -1.5230
        1   motor1  3   pred_om -1.4851
        1   motor1  3   null    -1.5624
        2   motor1  1   nopred_noom -1.1354
        2   motor1  1   pred_noom   -1.1614
        2   motor1  1   nopred_om   -1.2779
        2   motor1  1   pred_om -1.1234
        2   motor1  1   null    -1.2203
        2   motor1  2   nopred_noom -1.5728
        2   motor1  2   pred_noom   -1.6614
        2   motor1  2   nopred_om   -1.7076
        2   motor1  2   pred_om -1.7702
        2   motor1  2   null    -1.4170', header=T)
        
        dt <- data.table(df)
        
        delta_maker <- function(x) {
          return(x - x[5])
        }
        
        dt[, delta := delta_maker(Beta), by = list(ROI, Subject, Block)]
        
        #Subject    ROI Block   Condition    Beta   delta
        #1:       1 motor1     1 nopred_noom -2.8653 -0.0936
        #2:       1 motor1     1   pred_noom -2.9126 -0.1409
        #3:       1 motor1     1   nopred_om -2.8688 -0.0971
        #4:       1 motor1     1     pred_om -2.9098 -0.1381
        #5:       1 motor1     1        null -2.7717  0.0000
        #6:       1 motor1     2 nopred_noom -2.2382 -0.1216
        #7:       1 motor1     2   pred_noom -2.0583  0.0583
        #8:       1 motor1     2   nopred_om -2.2207 -0.1041
        #9:       1 motor1     2     pred_om -2.1928 -0.0762
        #10:       1 motor1     2        null -2.1166  0.0000
        #11:       1 motor1     3 nopred_noom -1.5992 -0.0368
        #12:       1 motor1     3   pred_noom -1.5493  0.0131
        #13:       1 motor1     3   nopred_om -1.5230  0.0394
        #14:       1 motor1     3     pred_om -1.4851  0.0773
        #15:       1 motor1     3        null -1.5624  0.0000
        #16:       2 motor1     1 nopred_noom -1.1354  0.0849
        #17:       2 motor1     1   pred_noom -1.1614  0.0589
        #18:       2 motor1     1   nopred_om -1.2779 -0.0576
        #19:       2 motor1     1     pred_om -1.1234  0.0969
        #20:       2 motor1     1        null -1.2203  0.0000
        #21:       2 motor1     2 nopred_noom -1.5728 -0.1558
        #22:       2 motor1     2   pred_noom -1.6614 -0.2444
        #23:       2 motor1     2   nopred_om -1.7076 -0.2906
        #24:       2 motor1     2     pred_om -1.7702 -0.3532
        #25:       2 motor1     2        null -1.4170  0.0000
        #Subject    ROI Block   Condition    Beta   delta
        

        【讨论】:

        • 这使用附加包datatable,您首先需要安装它,然后再安装library(datatable)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-24
        • 2018-11-28
        • 2021-01-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多