#2是不是真的意味着教程,所以一定要檢查出約data.table
偉大的在線資源。 website是一個很好的開始,並且關於SO的包裹 有很多問題,包括幾乎所有的東西。
在這裏,我只想告訴你,如果習慣了包的語法,它會變得多麼容易。
首先,讓我們加載包並在數據讀取:
library(data.table)
str <- "date subject trialn blockcode trialtype latency response correct
32913 15 1 practice taskswitch 1765 205 1
32913 15 2 practice cueswitch 4372 203 1
32913 15 3 practice cuerepetition 2523 203 0
32913 15 1 test cueswitch 2239 205 1
32913 15 2 test cuerepetition 1244 203 1
32913 15 3 test taskswitch 1472 203 0
32913 15 4 test cueswitch 1877 205 1
32913 15 5 test taskswitch 2271 203 1
30413 16 1 practice taskswitch 1377 203 1
30413 16 2 practice taskswitch 1648 203 1
30413 16 3 practice cueswitch 1181 205 1
30413 16 1 test cueswitch 1045 205 1
30413 16 2 test cuerepetition 969 203 0
30413 16 3 test cueswitch 857 203 1
30413 16 4 test taskswitch 1038 205 1
30413 16 5 test cuerepetition 836 203 0"
DT <- as.data.table(read.table(text=str, header=TRUE))
現在,這是一件事,你問:
僅在「測試」的試驗來看,每個獨特主題計算 總試驗次數,潛伏期試驗次數(即反應時間爲 )低於300ms,平均潛伏期平均正確(即準確性爲 )。
DT[blockcode=="test",
list(TotalNr = .N,
NrTrailLat = sum(latency < 300),
MeanLat = mean(latency),
MeanCor = mean(correct)),
by="subject"]
subject TotalNr NrTrailLat MeanLat MeanCor
1: 15 5 0 1820.6 0.8
2: 16 5 0 949.0 0.6
基本上,這些代碼幾行,我可以回答所有這些問題。在我看來,語法也很簡單。 對於我們的DT
,我們只想看一下觀察點blockcode=="test"
。接下來,我們要分別爲每個主題運行所有分析。 這很容易通過by="subject"
聲明完成。很酷的事情:如果你想分割幾個維度,只需添加它們...相反,忽視實踐的 ,讓我們分別來看看他們:
DT[,
list(TotalNr = .N,
NrTrailLat = sum(latency < 300),
MeanLat = mean(latency),
MeanCor = mean(correct)),
by="subject,blockcode"]
subject blockcode TotalNr NrTrailLat MeanLat MeanCor
1: 15 practice 3 0 2886.667 0.6666667
2: 15 test 5 0 1820.600 0.8000000
3: 16 practice 3 0 1402.000 1.0000000
4: 16 test 5 0 949.000 0.6000000
現在不要告訴我這是不是真棒!
讓我們嘗試另一個問題:
此外,創建一個包含 日期和subjectID的最後一個(或第一)值(這是爲了將數據和subjectID在 新的數據幀)的變量。
我不確定您在這裏的意思,因爲date
在您的示例中沒有針對每個主題進行更改。所以讓我們稍微難一點。假設我們想知道 第一個試驗的每個subject,blockcode
組合的延遲。爲此,我們應該首先對DT
進行排序,以便我們知道 第一個trialn
始終爲1.(對於此試題數據,這不是真的必要,因爲它似乎已排序)。
setkey(DT, subject, blockcode, trialn)
DT[, list(FirstLat = latency[1]) , by="subject,blockcode"]
subject blockcode FirstLat
1: 15 practice 1765
2: 15 test 2239
3: 16 practice 1377
4: 16 test 1045
但是,您想將其作爲DT
中的新列添加。要做到這一點,你可以使用:=
操作:
DT[, FirstLat := latency[1] , by="subject,blockcode"]
DT
date subject trialn blockcode trialtype latency response correct FirstLat
1: 32913 15 1 practice taskswitch 1765 205 1 1765
2: 32913 15 2 practice cueswitch 4372 203 1 1765
3: 32913 15 3 practice cuerepetition 2523 203 0 1765
4: 32913 15 1 test cueswitch 2239 205 1 2239
5: 32913 15 2 test cuerepetition 1244 203 1 2239
6: 32913 15 3 test taskswitch 1472 203 0 2239
7: 32913 15 4 test cueswitch 1877 205 1 2239
8: 32913 15 5 test taskswitch 2271 203 1 2239
9: 30413 16 1 practice taskswitch 1377 203 1 1377
10: 30413 16 2 practice taskswitch 1648 203 1 1377
11: 30413 16 3 practice cueswitch 1181 205 1 1377
12: 30413 16 1 test cueswitch 1045 205 1 1045
13: 30413 16 2 test cuerepetition 969 203 0 1045
14: 30413 16 3 test cueswitch 857 203 1 1045
15: 30413 16 4 test taskswitch 1038 205 1 1045
16: 30413 16 5 test cuerepetition 836 203 0 1045
所以這些只是一些想法,讓你開始。我花了這些努力,因爲我想告訴你,當你理解 的基本知識時,大多數事情變得相當容易。這應該是通過一開始就有點矯枉過正的手冊的動力。但是值得付出努力, 相信我!因爲我甚至沒有提到最好的部分:data.table
也是非常快的。祝你的分析順利。
非常感謝你的快速教程。我認爲data.table和plyr都是很好的選擇,我很想嘗試這兩種。我會開始閱讀:) – AlexR