【发布时间】:2020-07-01 15:07:23
【问题描述】:
我有以下数据框df,其中包含长格式的纵向数据(见下文)。我想根据某些条件创建一个名为 new.var 的新变量。如果一个人的 postLin 的第一个值 > 0 但 并且 preLin 的值 == 0,则此新变量应为 1。 new.var 每人最多只能有一个 1 (ID)。
df <- read.table(text=
"ID preLin postLin
800057 -8.55 0
800057 -6.34 0
800057 -5.34 0
800057 -4.34 0
800057 0 0.33
800119 -0.88 0
800119 0 0
800119 0 1
834011 -4.1 0
834011 -3.1 0
834341 0 1.34
834341 0 2.34
834341 0 3.34
834341 0 5.34
834341 0 6.66
800125 0 0
800125 0 2.14
897177 -0.33 0
897177 0 0.67
897177 0 1.67", header=TRUE)
首先,我尝试了这段代码:
df$new.var1 <- ifelse(df$preLin == 0 & (df$postLin >= 0 & df$postLin <= 1), 1, 0)
但是,对于 ID 800119,将有两个 1。
我的预期结果是这样的:
df_new <- read.table(text=
"ID preLin postLin new.var
800057 -8.55 0 0
800057 -6.34 0 0
800057 -5.34 0 0
800057 -4.34 0 0
800057 0 0.33 1
800119 -0.88 0 0
800119 0 0 1
800119 0 1 0
834011 -4.1 0 0
834011 -3.1 0 0
834341 0 1.34 0
834341 0 2.34 0
834341 0 3.34 0
834341 0 5.34 0
834341 0 6.66 0
800125 0 0 1
800125 0 2.14 0
897177 -0.33 0 0
897177 0 0.67 1
897177 0 1.67 0", header=TRUE)
有人知道我的问题的解决方案吗?非常感谢!
【问题讨论】:
-
但是您应该为 800119 的第三个实例的
new.var获得 1。这是该行的正确值,因为preLin是 0,postLin是>= 0 和 -
只有当我的条件第一次满足时,new.var 才应该是 1。因此,只有 800119 的第二个实例应该得到 1 而不是第三个实例。