【发布时间】:2017-08-03 14:39:15
【问题描述】:
我拥有的数据包含三个具有三个唯一 ID 的变量,每个变量都有多个记录。见下文
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) with 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 之间的差异。谢谢
-
是的,我的问题是您希望它是
y-z还是previous_y0 - z。您提供的示例,updated_y0(1,3)上面没有1 - 0。 -
对不起,你是对的。它应该是previous_y0 - z。
-
我更新了问题中的 updated_y0 值。
标签: r