问题描述
附言dput()
structure(list(ExperimentName = c("Habit_Experiment","Habit_Experiment","Habit_Experiment"
),Subject = c(1L,1L,1L),AccP = c(90.38461,90.38461,90.38461),Age = c(28L,28L,28L),Handedness = structure(c(2L,2L,2L),.Label = c("links","rechts"),class = "factor"),PracFail.RT = c(0L,0L,0L),Sex = structure(c(3L,3L,3L),.Label = c("divers","männlich","weiblich"),Block = 1:30,Colour = c("YELLOW","RED","YELLOW","DODGERBLUE","LIME","LIME"),contingency.RESP = c("","",""),contWord = c("",Correct = c("l","d","l","d"),Data = 1:30,Data.Sample = 1:30,Rare_C = c("","True","False","False"),Stim.ACC = c(0L,Stim.CRESP = c("l",Stim.RESP = c("d",Stim.RT = c(NA,808L,NA,691L,462L,884L,443L,466L,444L,385L,474L,441L,399L,347L,398L,418L,383L,451L,304L,389L,467L,395L,338L,333L,327L,562L,460L,374L),Word = c("XXXX","XXXX","warm","leicht","klein","ganz","weich","klar")),row.names = c(NA,30L),class = "data.frame")
解决方法
您可能不需要循环来执行此操作。这是使用 dplyr
包的可能解决方案。
假设您的数据框名为 df
,这里我首先使用 select
删除其他列以进行演示。您可以删除此行以保留数据框中的其他列。
接下来,为每个主题的数据中的每一行添加试验编号。然后,如果您对每个 group_by
和 Subject
使用 Word
,您可以计算 last_occurrence
,这是该 Word
的试验值差异。
第一次出现的词是NA
。
library(dplyr)
df %>%
select(Subject,Word) %>%
group_by(Subject) %>%
mutate(trial = row_number()) %>%
group_by(Subject,Word) %>%
mutate(last_occurrence = trial - lag(trial) - 1)
输出
Subject Word trial last_occurrence
<int> <chr> <int> <dbl>
1 1 XXXX 1 NA
2 1 XXXX 2 0
3 1 warm 3 NA
4 1 leicht 4 NA
5 1 leicht 5 0
6 1 warm 6 2
7 1 klein 7 NA
8 1 ganz 8 NA
9 1 leicht 9 3
10 1 leicht 10 0
11 1 klein 11 3
12 1 klein 12 0
13 1 warm 13 6
14 1 ganz 14 5
15 1 warm 15 1
16 1 leicht 16 5
17 1 leicht 17 0
18 1 ganz 18 3
19 1 ganz 19 0
20 1 klein 20 7
21 1 ganz 21 1
22 1 warm 22 6
23 1 ganz 23 1
24 1 warm 24 1
25 1 klein 25 4
26 1 klein 26 0
27 1 XXXX 27 24
28 1 XXXX 28 0
29 1 weich 29 NA
30 1 klar 30 NA