R语言如何使用mutate函数跨行计算相邻行比值并新增列
解决方案
你原写法的问题是把month列的数值直接当行索引用了,示例里month取值从10开始,和数据框实际行号(1-6)不匹配,自然算不对结果。
跨行取上一行值直接用dplyr内置的lag()函数即可,这个函数默认会给序列首位返回NA,刚好符合首行填空的要求,不需要额外处理。
完整可运行代码
# 加载dplyr,未安装请先运行 install.packages("dplyr") library(dplyr) month <- c(10,11,12,13,14,15) sell <-c(258356,278958,287928,312254,316287,318999) df <- data.frame(month, sell) df <- df %>% mutate(resultat = lag(sell) / sell)
输出结果
运行后得到的数据框和预期完全一致:
month sell resultat 1 10 258356 NA 2 11 278958 0.9261466 3 12 287928 0.9688464 4 13 312254 0.9220955 5 14 316287 0.9872489 6 15 318999 0.9914984
注:
lag()是按数据框当前的行顺序取前值,如果你后续需要先排序再计算,只需要在mutate前加arrange(month)即可,不会因为month列的数值大小、是否连续影响计算结果,比手动写位置索引的稳定性高很多。
内容的提问来源于stack exchange,提问作者antoine M
相关产品推荐
相关产品推荐

