r - 如何协调 purrr::map 与 case_when
问题描述
我想根据预定义的阈值对变量进行分类,如下所示:
library(tidyverse)
df <- tibble(values = sample(1:50))
classes <- c("A","B","C","D")
upper <- c(10,19,34,50)
lower <- c(0, upper[1:length(upper)-1])
segment <- df %>%
mutate(
class = case_when(
values >= lower[1] & values < upper[1] ~ classes[1],
values >= lower[2] & values < upper[2] ~ classes[2],
values >= lower[3] & values < upper[3] ~ classes[3],
values >= lower[4] & values < upper[4] ~ classes[4]
)
)
将生成一个新变量class
,该变量采用 中定义的类名classes
。目前case_when
对每个单独的条目进行硬编码classes
。只要类的数量仍然很少,这很好,但是如果我想增加类的数量,硬编码解决方案变得不切实际。是否可以在 case_when 中合并 purrr::map 来处理这个问题?
以下实施无效:
segment <- df %>%
mutate(
class = case_when(
purrr::map(values >= lower & values < upper ~ classes)
)
)
解决方案
看起来你可以只使用一个cut
函数:
breaks <- c(0,10,19,34,50)
labels <- c("A","B","C","D")
df$class <- cut(df$values, breaks = breaks, labels = labels)
推荐阅读
- python - 用于重命名文件的 Python 嵌套循环
- android - S20、S20+、S20 超级设备问题,无法从 API 获取数据
- c++ - 从函数的角度来看,ID 到文件路径的内部与外部映射
- powershell - PowerShell 中的膳食计划器 - 如何很好地存储数据?
- javascript - 如何先用字母排序对象数组,然后再用数字排序
- visual-studio-code - 存在 Zshell 主题时,终端开始表现不佳
- css - 如何删除文本笔划 css 中的锐边?
- fuzzy-logic - Scikit-fuzzy 输出不返回完整结果
- reactjs - Cannot convert hooks code to a class in React
- c - 关于linux设备驱动程序第3版中scull_follow函数的问题