如何用指定序列与数据框列逐行相减并生成多列结果?
解决数据框列与序列逐元素相减生成多列的问题
你需要将数据框中temp列的每一行,分别与序列B的每个值相减,生成对应的新列。原来的代码A$temp - B会触发R的循环回收机制,得到的是一个向量,而非预期的多列结构。下面提供两种实用的解决方案:
方法1:基础R实现
利用outer函数生成差值矩阵,再合并到原数据框:
temp <- c(26, 27, 28, 30, 32, 27, 28, 29) date <- as.Date(c('02-15-2021', '02-16-2021', '02-17-2021', '02-18-2021', '02-19-2021', '02-20-2021', '02-21-2021', '02-22-2021'), "%m-%d-%Y") A <- data.frame(date, temp) B <- seq(0.5, 20, 0.5) # 生成每行temp与每个B值的差值矩阵 diff_matrix <- outer(A$temp, B, `-`) # 为新列命名,格式为temp_minus_数值 colnames(diff_matrix) <- paste0("temp_minus_", B) # 合并原数据框与差值矩阵 A_new <- cbind(A, diff_matrix) # 查看结果前几行 head(A_new)
方法2:dplyr(tidyverse)实现
如果习惯使用tidyverse工具链,可以用mutate+across快速生成带命名的新列:
library(dplyr) A_new <- A %>% mutate( # 对temp列做运算,生成以"temp_minus_数值"命名的新列 across(temp, ~ set_names(.x - B, paste0("temp_minus_", B))) )
内容的提问来源于stack exchange,提问作者Marcel
相关产品推荐
相关产品推荐

