R语言如何使用mutate实现同符号连续值的累计计数并生成新列
R语言使用dplyr实现连续正负值序列计数
实现逻辑为:先识别数值符号变化的位置生成独立分组,再对每个分组内的序列按顺序计数,最后乘以对应符号即可得到要求的z列,完整可运行代码如下:
library(dplyr) # 示例数据 df <- data.frame(x = c(0.5, 1, 6.5, -2, 3, -0.2, -1)) # 生成z列(适配dplyr 1.1.0及以上版本) df <- df %>% mutate( sign_x = sign(x), group_id = cumsum(sign_x != lag(sign_x, default = 0)), z = row_number() * sign_x, .by = group_id ) %>% select(-sign_x, -group_id)
如果你使用的是1.1.0以下版本的dplyr,可以使用group_by写法兼容:
df <- df %>% mutate( sign_x = sign(x), group_id = cumsum(sign_x != lag(sign_x, default = 0)) ) %>% group_by(group_id) %>% mutate(z = row_number() * sign_x) %>% ungroup() %>% select(-sign_x, -group_id)
运行后得到的df输出如下,完全符合预期:
x z 1 0.5 1 2 1.0 2 3 6.5 3 4 -2.0 -1 5 3.0 1 6 -0.2 -1 7 -1.0 -2
内容的提问来源于stack exchange,提问作者Jcarl
相关产品推荐
相关产品推荐

