R语言编写函数实现DataFrame相邻列逐列相减生成新数据集求助
R语言实现相邻列差值计算的函数
首先构造你提供的示例数据集:
df <- data.frame( obs = 1:4, var1 = 5:8, var2 = 10:13, var3 = 14:17 )
方法一:基础R实现
无需额外安装包,用原生R代码编写函数:
calc_col_diff <- function(data) { # 提取除obs外的数值列 num_cols <- data[, -1] # 计算相邻列的后列减前列 diff_cols <- num_cols[, -1] - num_cols[, -ncol(num_cols)] # 给差值列命名为「后列名_前列名」格式 colnames(diff_cols) <- paste(colnames(num_cols)[-1], colnames(num_cols)[-ncol(num_cols)], sep = "_") # 合并obs列和差值列并返回结果 cbind(data[, 1, drop = FALSE], diff_cols) } # 调用函数得到结果 calc_col_diff(df)
方法二:tidyverse工具实现
如果你习惯用dplyr这类工具包,代码逻辑会更直观:
library(dplyr) library(purrr) calc_col_diff_tidy <- function(data) { var_names <- colnames(data)[-1] # 遍历每对相邻列,计算差值并命名 col_diffs <- map2(var_names[-1], var_names[-length(var_names)], ~set_names(!!.x - !!.y, paste(.x, .y, sep = "_"))) # 保留obs列,绑定差值列 data %>% select(obs) %>% bind_cols(col_diffs) } # 调用函数得到结果 calc_col_diff_tidy(df)
两种方法运行后都会得到你期望的输出:
obs var2_1 var3_2 1 1 5 4 2 2 5 4 3 3 5 4 4 4 5 4
内容的提问来源于stack exchange,提问作者Stephan
相关产品推荐
相关产品推荐

