【发布时间】:2025-11-22 08:15:03
【问题描述】:
我有一个温度值向量
temp <- c(2.6, 5.3, 4.6,9.8,9.4,14.1,16.2,16.4,11.6,8.0,3.0,5.0)
我试图为这个向量创建一个因子,定义为 3 个级别: 低于 5 (l),介于 5 和 15 (m) 之间,以及高于 15 (h)。 帮助表示赞赏。
【问题讨论】:
标签: r
我有一个温度值向量
temp <- c(2.6, 5.3, 4.6,9.8,9.4,14.1,16.2,16.4,11.6,8.0,3.0,5.0)
我试图为这个向量创建一个因子,定义为 3 个级别: 低于 5 (l),介于 5 和 15 (m) 之间,以及高于 15 (h)。 帮助表示赞赏。
【问题讨论】:
标签: r
我建议使用cut() 函数,然后您可以将结果存储在数据框中:
#Data
temp <- c(2.6, 5.3, 4.6,9.8,9.4,14.1,16.2,16.4,11.6,8.0,3.0,5.0)
#Cut
temp2 <- cut(temp,breaks = c(-Inf,5,15,Inf),labels = c('l','m','h'),include.lowest = T,right = F)
#Dataframe
df <- data.frame(temp,temp2)
输出:
temp temp2
1 2.6 l
2 5.3 m
3 4.6 l
4 9.8 m
5 9.4 m
6 14.1 m
7 16.2 h
8 16.4 h
9 11.6 m
10 8.0 m
11 3.0 l
12 5.0 m
【讨论】:
一个简单的基础 R 选项
c("l","m","h")[(temp>=5) + (temp>=15)+1]
给了
[1] "l" "m" "l" "m" "m" "m" "h" "h" "m" "m" "l" "m"
【讨论】:
你不能疯狂地做你想做的事。因为一个因子向量,必须包含在级别中定义的值。换句话说,您不能插入未出现在向量中的级别、值或标签。下面我提出了另一种可以创建的方式,即为您的案例创建一个因子列。
library(tidyverse)
temp <- c(2.6, 5.3, 4.6,9.8,9.4,14.1,16.2,16.4,11.6,8.0,3.0,5.0)
tab <- data.frame(
temp = temp
)
tab <- tab %>%
mutate(
case = case_when(
temp < 5 ~ "Below 5",
between(temp, 5, 15) ~ "Between 5 and 15",
temp > 15 ~ "Above 15"
)
)
tab$case <- factor(tab$case)
【讨论】:
cut 函数的作用