[英]How can I convert a numeric vector with discreete value ranges into a factor?
我正在嘗試將具有離散值的數值向量轉換為 R 中的一個因子。
x <- c(1,2,3,4,8,9,10,88,89,90)
我需要將此向量轉換為具有 4 個級別的因子變量,如下所示:
1,2(1級)
3,4(2級)
8,9,10(3級)
88,89, 90(4級)
我試過在 R 中使用因子,如下所示:
y <- factor(x, levels = c(1:2, 3:4, 8:10, 88:90))
這將返回一個具有 10 個級別的因子,而不是我想要的具有 4 個級別的因子。
str(y)
Factor w/ 10 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10
我也試過使用 cut 如下:
bins <- c(1,3,5,8,11,88,90)
y <- cut(x, breaks = bins, right = F, include.lowest = T)
table(y)
這也不會返回所需的結果,因為它為我不需要的 [5-8) 和 [11-88) 等范圍創建了一個級別。
y
[1,3) [3,5) [5,8) [8,11) [11,88) [88,90]
2 2 0 3 0 3
有沒有辦法將一系列數值轉換為 R 中的一個因子?
刪除未使用的級別:
# as per your code
bins <- c(1,3,5,8,11,88,90)
y <- cut(x, breaks = bins, right = FALSE, include.lowest = TRUE)
levels(y)
# [1] "[1,3)" "[3,5)" "[5,8)" "[8,11)" "[11,88)" "[88,90]"
# drop unused levels
y1 <- droplevels(y)
levels(y1)
#[1] "[1,3)" "[3,5)" "[8,11)" "[88,90]"
我們可以使用case_when
library(dplyr)
case_when(x %in% 1:2 ~ 1, x %in% 3:4 ~ 2, x %in% 8:10 ~ 3, x%in% 88:90 ~ 4)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.