r - 将多个变量重新编码为一个新变量会导致奇怪的减法
问题描述
我有几个二分变量,我想重新编码成一个新变量。但是以我的方式去做会导致错误的价值观。只有最后一个值是正确的,其他值有几个缺失。
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
这样做的正确方法是什么?提前致谢!
解决方案
原因是因为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。因此,仅对最后一个值给出正确答案。
推荐阅读
- vb.net - VB.NET + LINQ:将查询不同表中两列的结果保存在单个类属性中
- java - NotFoundException 被抛出以尝试获取现有类
- java - “POST”方法使用放心抛出 500 代码
- python - 从多个文件构建数据框,其中每个文件包含列数据
- database - 原因:SQL(查询)错误或缺少数据库。- 在颤振/飞镖中
- reactjs - 即使我没有在 react 应用程序的 req.body 中附加 _csrf,Express csurf 中间件也总是被接受,但 api 按预期在邮递员中工作
- javascript - 从本地存储中获取数据
- javascript - JavaScript(discord.js)TypeError:无法读取未定义的属性“startsWith”
- objective-c - React Native:通过事件总线发送事件时应用程序崩溃
- regex - 如何使用 Pandas 组合独立的正则表达式并将它们应用于数据集的所有行?