【发布时间】:2026-02-13 07:20:05
【问题描述】:
我想根据一组规则在数据框中编写一个新变量。我有一个带有主题变量、时间变量和变量 A、B 和 C 的数据框 df1,如下所示:
subject <- c(1,1,1,1,1,1,2,2,2,2,2,2)
time <- c(1,2,3,4,5,6,1,2,3,4,5,6)
A <- c(1,7,7,6,6,5,1,2,3,NA,NA,NA)
B <- c(2,1,1,1,1,1,6,5,4,NA,NA,NA)
C <-c(7,1,6,1,6,1,6,2,4,NA,NA,NA)
df1 <- data.frame(subject,time,A,B,C)
A、B 和 C 中的值范围从 1(最低)到 7(最高),也有一些 NA。现在我想编写一个新的二分变量newvar。每个主题的第一行应始终编码为 0。每当一行中得分最高的变量(A、B 或 C)更改为下一行中的一个或多个不同变量时,应编码为 1 .一个变量内的值是否从一行变化到下一行无关紧要,只要三个变量中的哪一个在一行内的得分与前一行相比有所变化。
df1 中的示例应该更清楚地说明这一点:
-
第 1 行编码为 0,因为它是主题 1 的第一行。C 具有 A、B、C三个变量中得分最高。
-
在第 2 行中,A 得分最高。因此,newvar = 1。
-
在第 3 行中,A 仍然得分最高,因此 newvar = 0。
-
在第 4 行,A 仍然得分最高 --> newvar = 0。
-
在第 5 行,现在 A 和 C 的得分最高,因此, 新变量 = 1。
-
在第 6 行中,只有 A 再次获得最高分,因此,newvar = 1。
-
第 7 行是主题 2 的第一行,因此 newvar 编码为 0。
-
在第 8 行中,newvar 应编码为 1,因为在前一行中,B 和C同样得分最高,现在只有B。
-
在第 9 行,newvar 应该再次编码为 1,因为现在 B 和 C 有 再次获得该行的最高分。
-
第 10 到 12 行应编码为 NA。
它应该是这样的:
newvar <-c(0,1,0,0,1,1,0,1,1,NA,NA,NA)
df2 <- data.frame(subject,time,A,B,C,newvar)
我将不胜感激任何关于如何解决此问题的意见!
【问题讨论】:
标签: r