0

为了简单起见,我希望 C 列等于 B 列的滞后,移位参数取决于 A 列中的整数,所以我想要:

   A | B | C  
   0 | 5 | 5 
   2 | 6 | NA 
   3 | 7 | NA 
   2 | 8 | 6

我试过了:

library(dplyr)
library(Hmisc)
data <- mutate(data, 
    C= Lag(B, shift=as.integer(A)),

但它不起作用,我只得到 NA,这可能是一个类型问题,但我不确定即使使用 as.integer 它也不起作用,有人知道为什么它不起作用吗?

非常感谢

4

2 回答 2

0

lagfromdplyr也有 shift 参数,所以不需要加载另一个包。一种方法是,

library(dplyr)
df$C <- diag(sapply(df$A, function(i) lag(df$B, i)))
df
#  A B  C
#1 0 5  5
#2 2 6 NA
#3 3 7 NA
#4 2 8  6
于 2016-10-05T09:53:19.980 回答
0

解决方案: shift 参数似乎没有将列值作为整数,所以我用另一种方式做到了:

df$C <- apply(as.data.frame(df$A), 1, function(i){ 
    nth(df$B, i) 
})

它取 B 的第 n 个值,其中 n 在 A col 中

(非常感谢你帮助我Sotos)

于 2016-10-05T14:48:26.187 回答