首页 > 解决方案 > 将多个变量重新编码为一个新变量会导致奇怪的减法

问题描述

我有几个二分变量,我想重新编码成一个新变量。但是以我的方式去做会导致错误的价值观。只有最后一个值是正确的,其他值有几个缺失。

set.seed(1)
id <- 1:1000
v1 <- rbinom(1000, 1, 0.05)
v2 <- rbinom(1000, 1, 0.1)
v3 <- rbinom(1000, 1, 0.15)
DF <- data.frame(id, v1, v2, v3)

table(DF$v1) # n = 53
table(DF$v2) # n = 102
table(DF$v3) # n = 154

DF$v_sum <- 0
DF$v_sum[DF$v1 == 1] <-  1
DF$v_sum[DF$v2 == 1] <-  2
DF$v_sum[DF$v3 == 1] <-  3

table(DF$v_sum) # 1 = 43 instead of 53, 2 ist 89 instead of 102 and 3 = 154 is correct

这样做的正确方法是什么?提前致谢!

标签: r

解决方案


原因是因为v1,v2和中的值 1v3是相互独立的,这意味着连续可能有多个 1。

sum(rowSums(DF[-1]) > 1)
#[1] 20

从上面我们可以看出,在 20 行中,一行中有多个 1,因此当您运行第 2 行(DF$v_sum[DF$v2 == 1] <- 2)时v_sum,第一行被覆盖,而当您运行第 3 行(DF$v_sum[DF$v3 == 1] <- 3)时,它会覆盖在行中分配的值1 和 2。因此,仅对最后一个值给出正确答案。


推荐阅读