R语言计算数据框指定列累计差值的内置高效函数有哪些?
R基础包内置的diff()函数完全可以满足你的需求,配合首元素拼接即可替代自定义循环实现,属于向量化运算,运行效率远高于for循环实现,尤其处理大样本数据时优势更明显。
你的自定义函数的计算逻辑是:输出列第一个元素保留原列首行值,从第二行开始为当前行值减上一行值,对应实现仅需一行代码:df_example$Cumulative_differenced <- c(df_example$column_2[1], diff(df_example$column_2))
完整可运行代码如下:
column_1 <- c(1, 2, 3) column_2 <- c(21000, 23400, 30000) df_example <- data.frame(column_1, column_2) # 直接计算累计差值列 df_example$Cumulative_differenced <- c(df_example$column_2[1], diff(df_example$column_2))
运行后得到的结果和你调用自定义函数得到的test数据框完全一致。
如果需要封装成通用函数,可以简化为以下版本:
cumulative_difference <- function(my_df, column_name) { # 用[[取列避免列名传参的语法问题 my_df$Cumulative_differenced <- c(my_df[[column_name]][1], diff(my_df[[column_name]])) return(my_df) } # 调用方式和你原来的完全一致 test <- cumulative_difference(my_df=df_example, column_name="column_2")
补充说明:
diff()默认参数lag=1,即计算相邻行的差值,如果你需要计算间隔N行的差值,修改lag参数为对应数值即可- 如果需要计算多阶差分(比如差值的差值),可修改
differences参数,例如diff(x, differences = 2)等价于diff(diff(x))
内容的提问来源于stack exchange,提问作者Reisikei
相关产品推荐
相关产品推荐

