我包含三个变量,其中包含三个唯一ID,每个都有多个记录。见下面在R中创建一个新列,其中包含一些规则
ID <- c(rep(1,7), rep(2,6), rep(3,5))
t <- c(seq(1,7), seq(1,6), seq(1,5))
y <- c(rep(6,7), rep(1,6), rep(6,5))
z <- c(5,0,0,0,1,0,0,0,0,1,0,0,0,4,2,1,0,1)
dat1 <- data.frame(ID, t, y, z)
我需要创建一个新列(我们称之为updated_y0)以下规则:每个ID i = 1,2,3和每个记录j中,
updated_y0(i,1)(即,按t排序的每个ID的第一条记录)= y(i,1)。
updated_y0(i,j)其中j> 1(即从第二记录开始)= updated_y0(i,j-1)-z(i,j-1)(前面的行的差异)
例如,对于ID = 1,
updated_y0(1,1)= Y(1,1)= 6,
updated_y0(1,2)= updated_y0 (1,1)-z(1,1)= 6-5 = 1,
updated_y0(1,3)= updated_y0(1,2) - Z(1,2)= 1-0 = 1 ...
新的数据(DAT2)是
ID <- c(rep(1,7), rep(2,6), rep(3,5))
t <- c(seq(1,7), seq(1,6), seq(1,5))
y <- c(rep(6,7), rep(1,6), rep(6,5))
z <- c(5,0,0,0,1,0,0,0,0,1,0,0,0,4,2,1,0,1)
updated_y0 <- c(6,1,1,1,1,0,0,1,1,1,0,0,0,6,2,0,-1,-2)
dat2 <- data.frame(ID, t, y, z, updated_y0)
也许我不理解,但对于第2部分,你的意思是'updated_y0(1,2)= updated_y0(1,1) - z(1,1)'?而不只是'updated_y0(1,2)= y(1,1) - z(1,1)' –
是的。这意味着对于每个id,从第二行开始,updated_y0是前一个y和z之间的差值。谢谢 – user9292
是的,我的问题是你想要它是'YZ或'previous_y0 - z'。你提供的例子,'updated_y0(1,3)'上面没有'1-0'。 –