将列值滞后组合

时间:2018-08-18 09:55:36

标签: r data-structures

我正在尝试解决数据帧中f(t)= f(t-1)+ f(t-2)+ f(t-3)..... + f(t-n)组合的问题。根据给定数据中的 Target(f(t))列值,我必须能够将其余值放在随后的列中。我需要一些R代码才能实现此组合。

我在下面的代码和屏幕截图(INPUT)中提供了数据:

data<-data.frame(id=1:5,
             target=c('b','a','c','d','e'),
             col1=c('e','b','e','b','a'),
             col2=c('d','e','a','c','d'),
             col3=c('a','d','b','e','c'),
             col4=c('c','c','d','a','b'))

output<-data.frame(id=1:5,
              target=c('b','a','c','d','e'),
              col1=c('e','b','a','c','d'),
              col2=c('d','e','b','a','c'),
              col3=c('c','d','e','b','a'),
              col4=c('a','c','d','e','b'))  

预期结果显示在屏幕快照(输出)中。

INPUT

OUTPUT

预先感谢...

2 个答案:

答案 0 :(得分:1)

以下内容仅使用基数R,并且可以执行您想要的操作。

cols <- grep("^col\\d+$", names(data), value = TRUE)
inx <- seq_along(cols)
res <- sapply(rev(inx), function(i){
    n <- seq_len(i)
    new <- c(as.character(data[["target"]])[-n], as.character(data[["target"]])[n])
    new
})

colnames(res) <- cols
res <- cbind(data[1:2], res)

identical(output, res)
#[1] TRUE

答案 1 :(得分:1)

这是base R使用embed的另一种方法

data[3:6] <- head(embed(rep(data$target, 2), 4)[-1,], 5)
data
#  id target col1 col2 col3 col4
#1  1      b    e    d    c    a
#2  2      a    b    e    d    c
#3  3      c    a    b    e    d
#4  4      d    c    a    b    e
#5  5      e    d    c    a    b