2016-02-15 124 views
1

我有數字向量(nth_RT)和數據幀(DF):映射值:計算百分

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百分位數,即第1個第1個對象的RT的第61個百分點,第2個第1個對象的RT的第47個百分點,第3個RT的第50個百分點阻止第一個主題,第一個第二個參與者的第53個百分點等等。所以數據框看起來像這樣:

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]) 

是否有計算百分位值和其添加爲新列的更好的辦法?我想可以使用循環或函數來依次讀入矢量中的每個值,然後計算百分位數。

回答

2

我認爲載體nth_RT沒有與您的BlockSubjectdf明確的對應關係。所以我建議你應該創建一個矩陣或data.frame來清楚地顯示對應關係。例如,

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循環遍歷每個Block - Subject對。

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"]) 
} 

我們發現所有的行第i Blockindex - Subject。然後我們可以子集df[index,"RT"]。我們以百分比grid_nth_RT[i,"nth_RT"]計算df[index,"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 更多地瞭解formula在R.

+0

謝謝你很多關於你的答案!它工作完美。的確,我想我應該檢查一些關於配方的信息。 – MariKo