在R中如何按数值范围给新列赋值:PSQI睡眠时长得分计算
R语言实现PSQI睡眠时长分箱赋值
核心实现逻辑
使用dplyr包的mutate()搭配case_when()完成区间映射,mutate()用于新增列,case_when()用于按优先级匹配多个条件赋值,原有睡眠时长列会完整保留。
注意:你的列名sleep duration包含空格,R代码中需要用反引号包裹该列名,避免语法报错。
完整可运行代码
# 加载依赖包 library(dplyr) # 构造示例数据(实际使用时替换为自己的数据集即可) raw_df <- data.frame( ID = c("a","b","c","d","e","f","g","h"), `sleep duration` = c(6.5,5,7.5,8,5,9,10,6), check.names = FALSE ) # 核心计算逻辑 result_df <- raw_df %>% # 新增PSQI_value列,按区间赋值 mutate(PSQI_value = case_when( `sleep duration` < 5 ~ 3, `sleep duration` >= 5 & `sleep duration` < 6 ~ 2, `sleep duration` >= 6 & `sleep duration` < 7 ~ 1, `sleep duration` >=7 ~ 0 ))
参数说明
mutate()内第一个参数为你要创建的新列名,可自行修改case_when()内的规则按顺序匹配,满足某条规则后就会停止后续判断,赋值为对应~右侧的数值,和你给出的分箱规则完全对应。运行后输出的result_df会包含原有的所有列+新增的PSQI分箱值列,和你提供的示例结果完全一致。
内容的提问来源于stack exchange,提问作者Chun-Chi Yang
相关产品推荐
相关产品推荐

