Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在r函数中迭代创建新列_R_Dplyr - Fatal编程技术网

在r函数中迭代创建新列

在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

作为免责声明,我很少使用任何apply函数,这可能就是为什么我要努力完成这项任务的原因

我想在一个R数据帧中创建多个新列(比如5)

想象一个代表标准普尔500指数每日收盘价的数据集


df我们可以使用
shift
from
data.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, .)