如何在使用lag函数后保留数据列的末尾值?
解决dplyr::lag操作后保留原列末尾值并新增行的问题
你需要的是对x列执行lag(1)偏移后,额外新增一行来保留原x列的末尾值(3),同时其他列补NA。原mutate(lag(...))只会在原有数据行数内修改值,不会自动新增行,所以得手动添加这一行。
方案一:手动指定列添加行
library(dplyr) # 原始数据 df <- data.frame(x = c(1, 2, 3), y = c(3, 5, 1), z = c(2, NA, NA)) # 处理流程:先偏移x列,再新增行 df_result <- df %>% mutate(x = lag(x, 1)) %>% bind_rows(tibble(x = last(df$x), y = NA, z = NA)) # 查看结果 df_result
执行后输出:
x y z 1 NA 3 2 2 1 5 NA 3 2 1 NA 4 3 NA NA
方案二:通用型写法(适配多列场景)
如果数据列比较多,不想逐个列名指定,可以用across批量修改非x列为NA:
df_result <- df %>% mutate(x = lag(x, 1)) %>% bind_rows(df %>% slice_tail(n=1) %>% mutate(across(-x, ~NA)))
这个方法会自动取原数据最后一行的x值,把其他所有列设为NA后添加到结果中,不用手动列全所有列名。
内容的提问来源于stack exchange,提问作者writer_typer
相关产品推荐
相关产品推荐

