代码之家  ›  专栏  ›  技术社区  ›  MariKo

将值从矢量映射到数据帧:计算百分比

  •  1
  • MariKo  · 技术社区  · 8 年前

    我有一个数字向量( 第nt_RT )和数据帧( 数据中心 ):

    nth_RT 
    [1] 0.61 0.47 0.50 0.53 0.50 0.56
    
    
    df
    #    Subject    RT Trial Block  Rank
    #     (int) (int) (int) (int) (int)
    #1        1   234     1     1     1
    #2        1   239     3     1     2
    #3        1   563     2     1     3
    #4        1   230     1     2     1
    #5        1   234     3     2     2
    #6        1   467     2     2     3
    #7        1   111     3     3     1
    #8        1   466     2     3     2
    #9        1   543     1     3     3
    #10       2    44     2     1     1
    #11       2   223     3     1     2
    #12       2   343     1     1     3
    #13       2    34     2     2     1
    #14       2   242     3     2     2
    #15       2   324     1     2     3
    #16       2    54     1     3     1
    #17       2   345     3     3     2
    #18       2   656     2     3     3
    

    我想计算并添加为新列( 第n个 )每个受试者每个区块的第n个百分位,即,第一区块第一受试者的RT的第61个百分位数、第二区块第一受受试者RT的第47个百分之一、第三区块第一受测者RT的50个百分比值、第一区块第二受试者RT53个百分分位数等。因此,数据帧如下所示:

    df
    #    Subject    RT Trial Block  Rank  nth
    #1        1   234     1     1     1   310.28
    #2        1   239     3     1     2   310.28
    #3        1   563     2     1     3   310.28
    #4        1   230     1     2     1   233.76
    #5        1   234     3     2     2   233.76
    #6        1   467     2     2     3   233.76
    #7        1   111     3     3     1   466
    #8        1   466     2     3     2   466
    #9        1   543     1     3     3   466
    #10       2    44     2     1     1   230.2
    #11       2   223     3     1     2   230.2
    #12       2   343     1     1     3   230.2
    #13       2    34     2     2     1   242
    #14       2   242     3     2     2   242
    #15       2   324     1     2     3   242
    #16       2    54     1     3     1   382.32
    #17       2   345     3     3     2   382.32
    #18       2   656     2     3     3   382.32
    

    我有每个参与者一个区块的代码,但它不起作用:

    nth_RT <-quantile(df$RT ~ Block * Subject, nth_RT[1])
    

    有没有更好的方法来计算百分位数并将其添加为新列?我想可以使用循环或函数从向量中连续读取每个值,然后计算百分位数。

    1 回复  |  直到 8 年前
        1
  •  2
  •   Po C.    8 年前

    我认为向量 nth_RT 没有与您的 Block Subject 在里面 df 。所以我建议您创建一个矩阵或数据。框架以清楚地显示对应关系。例如

    grid <- expand.grid(Block = unique(df$Block), Subject = unique(df$Subject))
    grid_nth_RT <- cbind(grid, nth_RT)
    

    然后你会得到:

    > grid_nth_RT
      Block Subject nth_RT
    1     1       1   0.61
    2     2       1   0.47
    3     3       1   0.50
    4     1       2   0.53
    5     2       2   0.50
    6     3       2   0.56
    

    然后,我们可以使用for循环遍历每个 - 主题 一对

    df$nth <- array(0, nrow(df))
    for(i in 1:nrow(grid_nth_RT)) {
      index <- df$Block == grid_nth_RT[i,"Block"] &
               df$Subject == grid_nth_RT[i,"Subject"]
      df$nth[index] <- quantile(df[index,"RT"], grid_nth_RT[i,"nth_RT"])
    }
    

    我们发现 index 第i行的所有行 - 主题 。然后我们可以子集 df[index,"RT"] 我们计算 df[索引,“RT”] 按百分比 grid_nth_RT[i,"nth_RT"] 。我们将结果存储到 df$nth[index] .

    > df
       Subject  RT Trial Block Rank    nth
    1        1 234     1     1    1 310.28
    2        1 239     3     1    2 310.28
    3        1 563     2     1    3 310.28
    4        1 230     1     2    1 233.76
    5        1 234     3     2    2 233.76
    6        1 467     2     2    3 233.76
    7        1 111     3     3    1 466.00
    8        1 466     2     3    2 466.00
    9        1 543     1     3    3 466.00
    10       2  44     2     1    1 230.20
    11       2 223     3     1    2 230.20
    12       2 343     1     1    3 230.20
    13       2  34     2     2    1 242.00
    14       2 242     3     2    2 242.00
    15       2 324     1     2    3 242.00
    16       2  54     1     3    1 382.32
    17       2 345     3     3    2 382.32
    18       2 656     2     3    3 382.32
    

    顺便说一下,从你的代码

    quantile(df$RT ~ Block * Subject, nth_RT[1])
    

    我想你对 ~ .与 ~ 被称为 formula 在R中,您可以查看此页 https://stat.ethz.ch/R-manual/R-devel/library/stats/html/formula.html 了解更多 公式 在R。