如何解决在 dplyr 中使用 & 的 case_when 语句有问题吗?
我正在尝试在我的数据集中创建一个额外的列来对百分位数进行分桶。理想情况下,我会按如下方式创建逻辑:
CASE
WHEN percentile >= 75 AND percentile < 90 THEN "75%-89% Percentile"
WHEN percentile >= 50 AND percentile < 75 THEN "50%-75% Percentile"
END
我对 dplyr 的尝试如下:
mutate(Bucket = case_when(as.double(percentile) >= 90 ~ "90%-100% Percentile",as.double(percentile) >= 75 & as.double(percentile) < 90 ~ "75%-89% Percentile",as.double(percentile) < 75 & as.double(percentile) >= 50 ~ "50%-75% Percentile",as.double(percentile) < 50 & as.double(percentile) >= 25 ~ "25%-50% Percentile",as.double(percentile) < 25 & as.double(percentile) >= 0 ~ "0%-25% Percentile"))
但是它没有正确分桶,请在屏幕截图中查看结果示例。这些百分位数的桶标志应为“75%-89% 百分位数”:
解决方法
percentile
列是 factor
。我们需要先转换为 character
类,然后再转换为 numeric
library(dplyr)
df1 %>%
mutate(percentile = as.numeric(as.character(percentile))) %>%
...
发生的情况是,当我们直接强制转换为数字/整数时,它会被强制转换为整数存储值而不是实际值
v1 <- factor(c(81.9,82.7,81.9,82.5))
as.numeric(v1)
#[1] 1 3 1 2
与以下不同
as.numeric(as.character(v1))
#[1] 81.9 82.7 81.9 82.5
或者使用 levels
as.numeric(levels(v1)[v1])
#[1] 81.9 82.7 81.9 82.5
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。