gpt4 book ai didi

r 中显式行的行号

转载 作者:行者123 更新时间:2023-12-01 09:54:08 24 4
gpt4 key购买 nike

我需要获取通过 id 分组的显式行的行号。假设数据框 (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

我需要再创建一个列来给出行号序列,不​​包括 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

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

df <- df %>%
group_by(id) %>%
mutate(row = row_number(id[b != 0]))

请提出一些更好的方法。

最佳答案

我会建议使用 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

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

关于r 中显式行的行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32090843/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com