R语言 循环遍历列表并在新列中为列的不同值添加行计数

cqoc49vn  于 2023-11-14  发布在  其他
关注(0)|答案(2)|浏览(154)

这是我第一次向这个论坛提问。我希望你能帮助我。我有一个包含眼动追踪数据的数据文件。在表格中,每行都是8.3 ms的样本。变量ID计数整个会话中记录的样本数量。变量TrialID列出了试验编号。我想要的是
1.变量状态的每个水平、每个试验和每个受试者的计数相同的列
1.一列,其中变量状态的每个水平、每个试验和每个受试者每行加8.3秒。
这是相关列的示例

Subject ID  TrialId Status
253 1   1   Fixation1
253 2   1   Fixation1
253 3   1   Fixation1
253 4   1   Fixation1
253 34  1   Preview1
253 35  1   Preview1
253 36  1   Preview1
253 66  1   Show1
253 67  1   Show1
253 68  1   Show1
253 69  1   Show1
253 70  1   Show1
253 134 2   Fixation1
253 135 2   Fixation1
253 150 2   Preview1
253 151 2   Preview1
253 152 2   Preview1
253 234 2   Show1
253 235 2   Show1
253 236 2   Show1
253 237 2   Show1
300 1   1   Fixation1
300 2   1   Fixation1
300 3   1   Preview1
300 44  1   Preview1
300 45  1   Preview1
300 46  1   Show1
300 47  1   Show1
300 48  1   Show1
300 49  1   Show1

字符串
我想要的输出看起来像这样:

Subject ID  TrialId Status  Binnr   Time
253 1   1   Fixation1   1   0
253 2   1   Fixation1   2   8.3
253 3   1   Fixation1   3   16.6
253 4   1   Fixation1   4   24.9
253 34  1   Preview1    1   0
253 35  1   Preview1    2   8.3
253 36  1   Preview1    3   16.6
253 66  1   Show1   1   0
253 67  1   Show1   2   8.3
253 68  1   Show1   3   16.6
253 69  1   Show1   4   24.9
253 70  1   Show1   5   33.2
253 134 2   Fixation1   1   0
253 135 2   Fixation1   2   8.3
253 150 2   Preview1    1   0
253 151 2   Preview1    2   8.3
253 152 2   Preview1    3   16.6
253 234 2   Show1   1   0
253 235 2   Show1   2   8.3
253 236 2   Show1   3   16.6
253 237 2   Show1   4   24.9
300 1   1   Fixation1 1 0
300 2   1   Fixation1 2     8.3
300 3   1   Preview1  1     0
300 44  1   Preview1  2     8.3
300 45  1   Preview1  3     16.6
300 46  1   Show1     1     0
300 47  1   Show1     2     8.3
300 48  1   Show1     3     16.6
300 49  1   Show1     4     24.9


我试着做了一个for循环,在行上循环,每次遇到主题编号/TrialID和状态级别时,它都会向空列binnr添加一个数字。

for(i in 1:length(dat)) {
  if (dat$Status == "Show1"& dat$TrialID == "1" & Subject == "223")


en然后附加一个值已经没有意义,因为它会太低效列出一个组合.我可以显示更多的代码,但我会很感激,如果你能给我一个东西开始帮助
我试着做了一个for循环,在行上循环,每次遇到主题编号/TrialID和状态级别时,它都会向空列binnr添加一个数字。

for(i in 1:length(dat)) {
  if (dat$Status == "Show1"& dat$TrialID == "1" & Subject == "223")


en然后附加一个值已经没有意义了,因为它会太低效,列出一个组合。我可以显示更多的代码,但有这么多初学者的错误和缺陷。我会很感激,如果你能给我一个开始,在不同的列循环

rqcrx0a6

rqcrx0a61#

我会提供这个选项:

library(dplyr)
df %>% 
  mutate(Binnr = row_number(), .by =c("Status","TrialId", "Subject"),
        Time = 8.3 * (Binnr-1))

字符串
或者在一个命令中:

mutate(df, Binnr = row_number(), .by =c("Status","TrialId", "Subject"), 
       Time = 8.3 * (Binnr-1))


输出量:

Subject  ID TrialId    Status Binnr Time
1      253   1       1 Fixation1     1  0.0
2      253   2       1 Fixation1     2  8.3
3      253   3       1 Fixation1     3 16.6
4      253   4       1 Fixation1     4 24.9
5      253  34       1  Preview1     1  0.0
6      253  35       1  Preview1     2  8.3
7      253  36       1  Preview1     3 16.6
8      253  66       1     Show1     1  0.0
9      253  67       1     Show1     2  8.3
10     253  68       1     Show1     3 16.6
11     253  69       1     Show1     4 24.9
12     253  70       1     Show1     5 33.2
13     253 134       2 Fixation1     1  0.0
14     253 135       2 Fixation1     2  8.3
15     253 150       2  Preview1     1  0.0
16     253 151       2  Preview1     2  8.3
17     253 152       2  Preview1     3 16.6
18     253 234       2     Show1     1  0.0
19     253 235       2     Show1     2  8.3
20     253 236       2     Show1     3 16.6
21     253 237       2     Show1     4 24.9
22     300   1       1 Fixation1     1  0.0
23     300   2       1 Fixation1     2  8.3
24     300   3       1  Preview1     1  0.0
25     300  44       1  Preview1     2  8.3
26     300  45       1  Preview1     3 16.6
27     300  46       1     Show1     1  0.0
28     300  47       1     Show1     2  8.3
29     300  48       1     Show1     3 16.6
30     300  49       1     Show1     4 24.9


使用的数据:

df <- structure(list(Subject = c(253L, 253L, 253L, 253L, 253L, 253L, 
253L, 253L, 253L, 253L, 253L, 253L, 253L, 253L, 253L, 253L, 253L, 
253L, 253L, 253L, 253L, 300L, 300L, 300L, 300L, 300L, 300L, 300L, 
300L, 300L), ID = c(1, 2, 3, 4, 34, 35, 36, 66, 67, 68, 69, 70, 
134, 135, 150, 151, 152, 234, 235, 236, 237, 1, 2, 3, 44, 45, 
46, 47, 48, 49), TrialId = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L), Status = c("Fixation1", "Fixation1", 
"Fixation1", "Fixation1", "Preview1", "Preview1", "Preview1", 
"Show1", "Show1", "Show1", "Show1", "Show1", "Fixation1", "Fixation1", 
"Preview1", "Preview1", "Preview1", "Show1", "Show1", "Show1", 
"Show1", "Fixation1", "Fixation1", "Preview1", "Preview1", "Preview1", 
"Show1", "Show1", "Show1", "Show1")), class = "data.frame", row.names = c(NA, 
-30L))

bzzcjhmw

bzzcjhmw2#

你应该可以使用dplyr::mutate()来实现这一点--Binnr只是每个组中的行数,所以使用dplyr::row_number()Time使用基数R seq()来创建一个从0到每个组中最大行数的序列(使用dplyr::n()),以8.3段计数。

df %>%
  mutate(Binnr = row_number(), 
         Time = seq(0, ((n()-1)*8.3), length.out = n()),
         .by = c(Status, TrialId, Subject))

字符串
输出

#    Subject  ID TrialId    Status Binnr Time
# 1      253   1       1 Fixation1     1  0.0
# 2      253   2       1 Fixation1     2  8.3
# 3      253   3       1 Fixation1     3 16.6
# 4      253   4       1 Fixation1     4 24.9
# 5      253  34       1  Preview1     1  0.0
# 6      253  35       1  Preview1     2  8.3
# 7      253  36       1  Preview1     3 16.6
# 8      253  66       1     Show1     1  0.0
# 9      253  67       1     Show1     2  8.3
# 10     253  68       1     Show1     3 16.6
# 11     253  69       1     Show1     4 24.9
# 12     253  70       1     Show1     5 33.2
# 13     253 134       2 Fixation1     1  0.0
# 14     253 135       2 Fixation1     2  8.3
# 15     253 150       2  Preview1     1  0.0
# 16     253 151       2  Preview1     2  8.3
# 17     253 152       2  Preview1     3 16.6
# 18     253 234       2     Show1     1  0.0
# 19     253 235       2     Show1     2  8.3
# 20     253 236       2     Show1     3 16.6
# 21     253 237       2     Show1     4 24.9
# 22     300   1       1 Fixation1     1  0.0
# 23     300   2       1 Fixation1     2  8.3
# 24     300   3       1  Preview1     1  0.0
# 25     300  44       1  Preview1     2  8.3
# 26     300  45       1  Preview1     3 16.6
# 27     300  46       1     Show1     1  0.0
# 28     300  47       1     Show1     2  8.3
# 29     300  48       1     Show1     3 16.6
# 30     300  49       1     Show1     4 24.9

相关问题