我正在尝试解决数据帧中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'))
预期结果显示在屏幕快照(输出)中。
预先感谢...
答案 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