【发布时间】:2018-02-23 13:35:59
【问题描述】:
我正在尝试创建一个新变量,它基本上是我的数据框中另一个变量的起始值。示例数据:
id <- rep(c(1, 2), each = 8)
outcome <- rep(1:5, length.out = 16)
time <- rep(c(0, 1, 3, 4),4)
Attitude <- rep(c('A1', 'A2', 'A1', 'A2'), each = 4)
df <- data.frame(id, Attitude, outcome, time)
我想要得到的是一个名为 new_var(或其他)的新列,它等于 time == 0 处 id = id 的 outcome 的值,并且还取决于 Attitude。因此,我想将dataframe 扩展为:
df$new_var <- c(1,1,1,1,5,5,5,5,4,4,4,4,3,3,3,3)
只有这样才能进行一些体面的编码。在 SAS 中,我知道我可以使用 lag 函数来做到这一点。我真的很感激一个不是“变通”的解决方案,所以它就像 SAS,而是正确的 r 解决方案。最后,我也想在 r 中变得更强大。
相关:Retain and lag function in R as SAS 但是,我更喜欢一些基于索引或“通常”r 方式的解决方案。在这里它也不依赖于其他条件。
因此,重要的是编码适用于不同的ids、attitude 级别/变量(A1、A2、...),并且time == 0 处的outcome value 基本上复制到@987654334 @。
我希望我能清楚地传达我的信息。如果不是,我认为一小段示例代码以及我想如何扩展它应该足够清楚。期待建议。
编辑@jogo 答案的另一个示例代码。
ID <- rep(1, 36)
Attitude <- rep(c('A1', 'A2','A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9'),
length.out =36)
Answer_a <- rep(1:5, length.out = 36)
time <- as.character(rep(c(0, 1, 3, 4), each = 9))
df <- data.frame(ID, Attitude, Answer_a, time)
df$time <- as.character(df$time)
【问题讨论】:
标签: r dataframe longitudinal