gpt4 book ai didi

r - "binning"行进入范围 (dplyr/R)

转载 作者:行者123 更新时间:2023-12-05 09:06:29 25 4
gpt4 key购买 nike

我在尝试将数据集中的行放入“容器”时遇到了很多困难。例如,假设我有一个包含“var1”和“var2”的数据框“df”:

enter image description here

我想创建一个名为“var3”的新变量,它遵循以下逻辑(R 代码):

1) if var1 <5 and var2<5 .... then var3 = "a"
2) if var1 between (5,10) and var2 between (5,10) .... then var3 = "b"
3) if var1 > 10 and and var2>10 .... then var3 = "c"

根据我之前发布的问题 ( If statements with multiple ranges (R) ),我尝试了以下逻辑:

library(dplyr)
df %>%
mutate(var3 = case_when(var1 < 5 & var2 < 5 ~ 'a',
var1 > 5 & var1 < 10 & var2 > 5 & var2 < 10 ~ 'b',
var1 >10 & var2 >10 ~ 'c'))

但是当我检查 df$var3 时,逻辑似乎不正确(即 var3 的某些条目没有任何值。注意:var1 和 va2 的最小可能值为 0)。

有人可以帮帮我吗?

谢谢

更新:

示例数据集:

a <- rnorm(50,10,10)
b <- rnorm(50, 2,8)

var1 = abs(a)
var2 = abs(b)

df = data.frame(var1, var2)

最佳答案

如果你想使用case_when

library(dplyr)

## data make
set.seed(111)
df = data.frame(var1 = abs(rnorm(50,10,10)), var2 = abs(rnorm(50,2,8)))

## core
df <- df %>%
mutate(var3 = case_when(var1 < 5 & var2 < 5 ~ 'a',
var1 < 10 & var2 < 10 ~ 'b',
TRUE ~ 'c'))
## plot to check
with(df, plot(var1, var2, col = c(2:4)[as.numeric(as.factor(var3))], cex = 0.7))
abline(h = c(5, 10), v = c(5, 10), lty = 2)

enter image description here

关于r - "binning"行进入范围 (dplyr/R),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66022063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com