基于列中数值生成上下区间边界的R语言实现求助
在R中为数值匹配区间上下界的实现方法
这里提供两种实用方法,帮你给数据新增区间下界(lower bound)和上界(higher bound)列:
方法一:使用基础R的cut()函数
cut()是R中专门用于划分数值区间的工具,代码简洁高效:
- 先构造示例数据(注意R默认用点作为小数点,若你的数据是逗号分隔,后面会说明转换方法):
df <- data.frame(value = c(0.5, 0.63, 0.75, 0.82, 0.9375))
- 定义区间断点,然后生成区间并提取上下界:
# 定义你需要的区间断点 breaks <- c(0.5, 0.625, 0.75, 0.8125, 0.875, 0.9375) # 用cut划分区间,right=FALSE表示左闭右开,include.lowest确保0.5被包含 df$interval <- cut(df$value, breaks = breaks, include.lowest = TRUE, right = FALSE) # 从区间字符串中提取上下界数值 df$lower_bound <- as.numeric(substr(as.character(df$interval), 2, 5)) df$higher_bound <- as.numeric(substr(as.character(df$interval), 8, 12)) # 查看结果 print(df)
方法二:使用dplyr的case_when()(更直观易读)
如果你在学习tidyverse生态,case_when()能清晰展示每个区间的判断逻辑,适合新手理解:
- 先加载
dplyr包(如果没安装先运行install.packages("dplyr")):
library(dplyr)
- 用
mutate()新增列,通过case_when()匹配每个区间:
df <- df %>% mutate( lower_bound = case_when( value >= 0.5 & value < 0.625 ~ 0.5, value >= 0.625 & value < 0.75 ~ 0.625, value >= 0.75 & value < 0.8125 ~ 0.75, value >= 0.8125 & value < 0.875 ~ 0.8125, value >= 0.875 & value <= 0.9375 ~ 0.875 ), higher_bound = case_when( value >= 0.5 & value < 0.625 ~ 0.625, value >= 0.625 & value < 0.75 ~ 0.75, value >= 0.75 & value < 0.8125 ~ 0.8125, value >= 0.8125 & value < 0.875 ~ 0.875, value >= 0.875 & value <= 0.9375 ~ 0.9375 ) ) # 查看结果 print(df)
注意:处理逗号作为小数点的情况
如果你的原始数据用逗号代替小数点(比如欧洲格式),可以这样转换:
# 方法1:读取数据时指定小数点符号 df <- read.csv("your_data_file.csv", dec = ",") # 方法2:转换已有的value列 df$value <- as.numeric(gsub(",", ".", df$value))
内容的提问来源于stack exchange,提问作者vojta9
相关产品推荐
相关产品推荐

