在r函数中迭代创建新列
作为免责声明,我很少使用任何apply函数,这可能就是为什么我要努力完成这项任务的原因 我想在一个R数据帧中创建多个新列(比如5) 想象一个代表标准普尔500指数每日收盘价的数据集在r函数中迭代创建新列,r,dplyr,R,Dplyr,作为免责声明,我很少使用任何apply函数,这可能就是为什么我要努力完成这项任务的原因 我想在一个R数据帧中创建多个新列(比如5) 想象一个代表标准普尔500指数每日收盘价的数据集 df我们可以使用shiftfromdata.table,它可以为n library(data.table) setDT(df)[,paste0("S&P500_LAG_", 1:5) := shift(value, n = 1:5)] 如果一列中有多个symbols,则按符号分组 setDT(df)[,p
df我们可以使用shift
fromdata.table
,它可以为n
library(data.table)
setDT(df)[,paste0("S&P500_LAG_", 1:5) := shift(value, n = 1:5)]
如果一列中有多个symbol
s,则按符号分组
setDT(df)[,paste0("symbol_LAG_", 1:5) := shift(value, n = 1:5), by = symbol]
在tidyverse
中,一种方法是map
library(dplyr)
library(stringr)
library(purrr)
map_dfc(1:5, ~ df %>%
transmute(!! str_c("S&P500_LAG_", .x) := lag(value, n = .x))) %>%
bind_cols(df, .)
使用多个符号
map_dfc(1:5, ~ df %>%
group_by(symbol) %>%
transmute(!! str_c("symbol_LAG_", .x) := lag(value, n = .x))) %>%
bind_cols(df, .)
对于多个符号tidyverse
solution@akrun,您缺少了一个%%>%
,但当我让它运行时,它会不断产生恼人的额外列,因此我实际上会这样做,这是90%的解决方案,只需稍加调整<代码>映射dfc(1:5,~df%>%group\U by(symbol)%%>%mutate(!!str\U c(“symbol\U LAG\U,.x):=LAG(value,n=.x)))%%>%select(symbol,value,contains(“symbol\U LAG”)
map_dfc(1:5, ~ df %>%
group_by(symbol) %>%
transmute(!! str_c("symbol_LAG_", .x) := lag(value, n = .x))) %>%
bind_cols(df, .)