R中dplyr rowwise()状态下无法更新line编号列如何解决?
问题原因
你的猜测完全正确,rowwise() 本质是一种特殊的分组状态,会将数据框的每一行设为独立分组。你在mutate中调用的min(line)、length(line)都是在单个行分组内计算的,每个分组只有1个元素,所以seq(min(line), length.out = 1)最终只会返回该行原始的数值,无法生成全局连续序列。
关闭rowwise状态的方法
- 通用方案:使用
ungroup(),可以解除所有分组状态(包括rowwise逐行分组、普通group_by分组),也就是你测试验证过的可行方案。 - 专用方案:dplyr 1.0.0及以上版本提供了
unrowwise()函数,仅解除逐行分组状态,适合需要保留其他分组规则的场景。
正确运行代码
# 方法1:通用解除分组 df %>% ungroup() %>% mutate(line = as.numeric(line), line = seq(min(line), length.out = length(line))) # 方法2:仅解除逐行分组 df %>% unrowwise() %>% mutate(line = as.numeric(line), line = seq(min(line), length.out = length(line)))
执行后line列会从最小值302开始,生成302、303……311的连续整数序列。
内容的提问来源于stack exchange,提问作者Chris Ruehlemann
相关产品推荐
相关产品推荐

