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)
请建议一些更好的方法来做到这一点.
我建议使用该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
| 归档时间: |
|
| 查看次数: |
376 次 |
| 最近记录: |