R:如何为每个主题(不包括NA值)创建排名变量

R:如何为每个主题(不包括NA值)创建排名变量,r,dplyr,tidyverse,R,Dplyr,Tidyverse,我想做这样一个情节: 我有“注视持续时间”(以秒为单位,但没关系)和“时间”变量,我需要创建“顺序注视次数”变量,其中注视将根据每个受试者的时间变量进行排序。 我的固定数据包括一些NA值,这些值不应包括在排名中 摘自我的数据: Subject FixationDuration Time 1 NA 1 1 0.33 2 1 NA 3 1 0.15

我想做这样一个情节:

我有“注视持续时间”(以秒为单位,但没关系)和“时间”变量,我需要创建“顺序注视次数”变量,其中注视将根据每个受试者的时间变量进行排序。 我的固定数据包括一些NA值,这些值不应包括在排名中

摘自我的数据:

Subject FixationDuration Time
1       NA               1
1       0.33             2
1       NA               3
1       0.15             4.22
1       3.20             5.93
..
2       6.88             1
2       9.23             3
2       0.77             3.01
2       1.88             4.91
..
15      6.22             1
15      NA               1.56
15      NA               1.76
15      0.24             2.39
我需要以下结果:

Subject FixationDuration Time  OrdinalFixationNumber
1       NA               1     NA
1       0.33             2     1
1       NA               3     NA
1       0.15             4.22  2
1       3.20             5.93  3
..
2       6.88             1     1
2       9.23             3     2
2       0.77             3.01  3
2       1.88             4.91  4
..
15      6.22             1     1
15      NA               1.56  NA
15      NA               1.76  NA
15      0.24             2.39  2

有人能帮我吗?谢谢。

这里有一个选项。按“主题”分组后,
将“FixationDuration”中的非Na元素替换为按“时间”值排序的
行编号,其中“FixationDuration”为非Na

library(dplyr)
df1 %>% 
   group_by(Subject) %>% 
   mutate(OrdinalFixationNumber = replace(FixationDuration,
      !is.na(FixationDuration), row_number(Time[!is.na(FixationDuration)])))
# A tibble: 13 x 4
# Groups:   Subject [3]
#   Subject FixationDuration  Time OrdinalFixationNumber
#     <int>            <dbl> <dbl>                 <dbl>
# 1       1            NA     1                       NA
# 2       1             0.33  2                        1
# 3       1            NA     3                       NA
# 4       1             0.15  4.22                     2
# 5       1             3.2   5.93                     3
# 6       2             6.88  1                        1
# 7       2             9.23  3                        2
# 8       2             0.77  3.01                     3
# 9       2             1.88  4.91                     4
#10      15             6.22  1                        1
#11      15            NA     1.56                    NA
#12      15            NA     1.76                    NA
#13      15             0.24  2.39                     2
数据
df1这里有一个选项。按“主题”分组后,
将“FixationDuration”中的非Na元素替换为按“时间”值排序的
行编号,其中“FixationDuration”为非Na

library(dplyr)
df1 %>% 
   group_by(Subject) %>% 
   mutate(OrdinalFixationNumber = replace(FixationDuration,
      !is.na(FixationDuration), row_number(Time[!is.na(FixationDuration)])))
# A tibble: 13 x 4
# Groups:   Subject [3]
#   Subject FixationDuration  Time OrdinalFixationNumber
#     <int>            <dbl> <dbl>                 <dbl>
# 1       1            NA     1                       NA
# 2       1             0.33  2                        1
# 3       1            NA     3                       NA
# 4       1             0.15  4.22                     2
# 5       1             3.2   5.93                     3
# 6       2             6.88  1                        1
# 7       2             9.23  3                        2
# 8       2             0.77  3.01                     3
# 9       2             1.88  4.91                     4
#10      15             6.22  1                        1
#11      15            NA     1.56                    NA
#12      15            NA     1.76                    NA
#13      15             0.24  2.39                     2
数据
df1很抱歉,它对我不起作用,我认为问题的表述不正确,所以我再次尝试了更详细的表述。因为您之前的问题大于0,现在是NAI,很抱歉,它对我不起作用,我认为问题的表述不正确,所以我再次尝试了一个更详细的公式,因为你之前的问题是大于0,现在是NA
df1 <- structure(list(Subject = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
15L, 15L, 15L, 15L), FixationDuration = c(NA, 0.33, NA, 0.15, 
3.2, 6.88, 9.23, 0.77, 1.88, 6.22, NA, NA, 0.24), Time = c(1, 
2, 3, 4.22, 5.93, 1, 3, 3.01, 4.91, 1, 1.56, 1.76, 2.39)), 
class = "data.frame", row.names = c(NA, 
-13L))