r中显式行的行号

Dhe*_*ngh 3 r row-number dataframe dplyr

我需要为id分组的显式行获取行号.假设dataframe(df)如下所示:

 id  a   b 
 3   2   NA
 3   3   2
 3   10  NA
 3   21  0
 3   2   NA
 4   1   5
 4   1   0
 4   5   NA
Run Code Online (Sandbox Code Playgroud)

我需要创建一个列,它将给出行号序列,不​​包括大小写b == 0.

期望的输出:

 id  a   b   row
 3   2   NA   1
 3   3   2    2
 3   10  NA   3
 3   21  0    -
 3   2   NA   4
 4   1   5    1
 4   1   0    -
 4   5   NA   2
Run Code Online (Sandbox Code Playgroud)

我使用dplyr但无法实现相同,我的代码:

df <- df %>%
       group_by(id) %>%
       mutate(row = row_number(id[b != 0]))
Run Code Online (Sandbox Code Playgroud)

请建议一些更好的方法来做到这一点.

Dav*_*urg 7

我建议使用该data.table软件包,因为它具有很好的子集操作能力,从而避免了低效率的操作,例如ifelse评估整个数据集.另外,最好将矢量保持在数字类中(以备将来操作),因此NA可能比-(字符)更可取,这是一个可能的解决方案

library(data.table)
setDT(df)[is.na(b) | b != 0, row := seq_len(.N), by = id]
#    id  a  b row
# 1:  3  2 NA   1
# 2:  3  3  2   2
# 3:  3 10 NA   3
# 4:  3 21  0  NA
# 5:  3  2 NA   4
# 6:  4  1  5   1
# 7:  4  1  0  NA
# 8:  4  5 NA   2
Run Code Online (Sandbox Code Playgroud)

这里的想法是仅对行进行操作,is.na(b) | b != 0并在适当地.N更新(使用)时生成每个组size()的序列.默认情况下,所有其余行都将分配s.row :=NA