簡體   English   中英

如何將具有離散值范圍的數值向量轉換為因子?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM